Asp.Net Core 3.1学习-读取、监听json配置文件(7)

一、前言

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

二、读取配置文件

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

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

{
    "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方法来读取配置文件code

[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["节点名"];xml

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

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

 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; }
    }

调用的代码token

[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也获取到值了,这样强类型的调用起来岂不是更方便。接口

 四、监视文件的变动

[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;
        }

修改文件能够看到保存的时候就会出现,不知道为什么会出现两次下来研究研究;ci

 五、总结

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

每日一句心灵鸡汤:其实一我的也是能够活得漂亮,本身笑给本身看,本身哭给本身听。懂得让步的人是聪明的,这是把决定事态走向的主动权握在了本身手上。感情对抗中,赢了面子就输了情分。每每死撑到底的人,都成孤家寡人。弯腰不是认输,只是为了拾起丢掉的幸福。

相关文章
相关标签/搜索