读取 配置文件_Asp.Net Core 3.1读取、监听json配置文件

本文介绍了在Asp.Net Core 3.1中如何读取和监听JSON配置文件,包括使用 Ini 和 XML 文件配置提供程序,通过实体类接收配置,以及实时监测文件变更。在控制器中读取配置文件,利用GetSection方法层层深入获取信息,并创建DTO类映射配置结构,实现类型化访问配置。此外,文中还提及了文件变更触发的两次通知现象,提出进一步研究的计划。
摘要由CSDN通过智能技术生成

1、前言

文件配置提供程序默认的给我们提供了ini、json、Xml等。都是读取不同格式的文件。文件配置提供程序支持文件可寻、必选、文件变更的监视。

2、读取配置文件

主要运用的包:需要Ini、xml的添加相关包就行。

739f382278e51d27156a8d9607a38dcd.png

这次依然使用 Core3.1 WebApi项目,在启动程序接口里面读取json配置文件,先看看json文件的格式。里面有很多嵌套的子元素。

{    "Name": "wyy",    "Age": 18,    "QQ": "30119459",    "CardInfo": {        "Name": "wyy",        "Card": "5303231999XXX",        "Birthday": "2001-02-28",        "Address": {            "Provience": "云南省",            "City": "XX市",            "Country": "XX县"        }    },    "IsMarry": true}

我们在WeatherForecastController中修改get方法来读取配置文件

[HttpGet]        public int Get()        {            var builder = new ConfigurationBuilder();            //参数 文件路径       optional:文件不错在就会报错(默认false)    reloadOnChange:文件变更了读取新的文件(默认true)            builder.AddJsonFile("config.json",optional:false,reloadOnChange:true);            var configRoot = builder.Build().GetSection("CardInfo").GetSection("Address");            var city = $"City:{configRoot["City"]}";            Console.WriteLine(city);            return 1;        }

这里需要注意的是,如果有很多层就挨个的GetSection 下去,现在读取到的就是Address里面的信息。这里读取就跟MVC里面的一样的 直接configRoot["节点名"];

3、使用实体类来接收配置文件

新增一个实体类configDto,里面的信息要跟配置文件对应,数据类型也要对应,这里的原理就跟JsonConvert序列化一样 不对应的就接收不到值

 public class ConfigDto    {        public string Name { get; set; }        public int Age { get; set; }        public string QQ { get; set; }        public CardInfo CardInfo { get; set; }        public bool IsMarry { get; set; }    }    public class CardInfo    {        public string Name { get; set; }        public string Card { get; set; }        public string Birthday { get; set; }        public Address Address { get; set; }    }    public class Address    {        public string Provience { get; set; }        public string City { get; set; }        public string Country { get; set; }    }

调用的代码

[HttpGet]        public int Get()        {            var builder = new ConfigurationBuilder();            //参数 文件路径       optional:文件不错在就会报错(默认true)    reloadOnChange:文件变更了读取新的文件(默认true)            builder.AddJsonFile("config.json",optional:true,reloadOnChange:true);            ConfigDto conf = new ConfigDto();            var configRoot = builder.Build();                configRoot.Bind(conf);            return 1;        }

运行项目打上断点 添加监视可以Dto也获取到值了,这样将类型的调用起来岂不是更方便。

728d67e3bd67b176c82f428e34e7204e.png

4、监视文件的变更

[HttpGet]        public int Get()        {            var builder = new ConfigurationBuilder();            //参数 文件路径       optional:文件不错在就会报错(默认false)    reloadOnChange:文件变更了读取新的文件(默认true)            builder.AddJsonFile("config.json",optional:false,reloadOnChange:true);                    ConfigDto conf = new ConfigDto();            var configRoot = builder.Build();                configRoot.Bind(conf);            //监视文件变更            IChangeToken token = configRoot.GetReloadToken();            ChangeToken.OnChange(() => configRoot.GetReloadToken(), () =>            {                //做你想做的事  业务逻辑                Console.WriteLine("文件修改了");            });            return 1;        }

修改文件可以看到保存的时候就会出现,不知道为何会出现两次下来研究研究;

9a6bbd76ea5675093d3d77ec813868cd.png

5、总结

这里主要用了文件的读取、监视、强类型接收等操作、关于配置文件的程序修改下来慢慢研究。关于实体类型是否能设置私有有待考证。学无止境。

其实一个人也是可以活得漂亮,自己笑给自己看,自己哭给自己听。懂得让步的人是聪明的,这是把决定事态走向的主动权握在了自己手上。感情对抗中,赢了面子就输了情分。往往死撑到底的人,都成孤家寡人。弯腰不是认输,只是为了拾起丢掉的幸福。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值