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

每日一句心靈雞湯:其實一我的也是能夠活得漂亮,本身笑給本身看,本身哭給本身聽。懂得讓步的人是聰明的,這是把決定事態走向的主動權握在了本身手上。感情對抗中,贏了面子就輸了情分。每每死撐到底的人,都成孤家寡人。彎腰不是認輸,只是爲了拾起丟掉的幸福。

相關文章
相關標籤/搜索