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


    1、前言

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

    2、读取配置文件

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

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

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

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

     5、总结

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

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

     

  • 相关阅读:
    swap函数的例子
    实现类似shared_ptr的引用计数
    使用new分配内存的类需要自己定义拷贝构造函数
    练习13.14 13.15 13.16
    查询单词,综合例子。
    无序容器
    关联容器操作
    关联容器概述
    文本查询程序
    shared_ptr与weak_ptr的例子
  • 原文地址:https://www.cnblogs.com/w5942066/p/12890304.html
Copyright © 2020-2023  润新知