zoukankan      html  css  js  c++  java
  • .NET Core控制台利用【Options】读取Json配置文件

    创建一个 .NET Core控制台程序

    1. 添加依赖
    • Microsoft.Extensions.Configuration
    • Microsoft.Extensions.Configuration.FileExtensions
    • Microsoft.Extensions.Configuration.Json
    1. 添加一个Config文件夹,用来存放自定义配置文件。
    2. 新建一个json配置文件,名字随便取。
    {
      "StudentsOptions": {
    	"BeginTime": "2020-06-28 21:05:00",
        "URL": "http://yezs.wyjycyw.com/report",
        "Students": [
          {
            "Name": "学生姓名",
            "Address": "住址",
            "Identity": "身份证号码",
            "ParentName": "监护人姓名",
            "Mobile": "监护人手机",
            "SchoolId": "学校ID"
          },{...}
        ]
      }
    }
    
    1. main函数中加入json文件,如下:
    static void Main(string[] args)
    {
        IConfigurationRoot config = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("//Config//students.json", true, true)
                .Build();
    }
    

    当然到这里,你可以使用Configuration直接读取,但是我的配置文件比较复杂,有可能是一个对象数组,所以采用Options选项配置会更好一点。

    使用Options接口

    1. 引入Microsoft.Extensions.Options
    PM>Package-install Microsoft.Extensions.Options
    
    1. 新建一个配置类
    public class StudentsOptions
    {
        public const string name = "StudentsOptions";
        public string BeginTime { get; set; }
        public string URL { get; set; }
        public List<Student> Students { get; set; }
    }
    
    1. 添加一个Student的实体类,来存放学生信息
    public class Student
    {
        public string Name { get; set; }
        public string Identity { get; set; }
        public string ParentName { get; set; }
        public string Mobile { get; set; }
        public string SchoolId { get; set; }
        public string Address { get; set; }
    }
    
    1. 修改Main函数
    static void Main(string[] args)
    {
        IConfigurationRoot config = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("//Config//students.json", true, true)
                .Build();
        var service = new ServiceCollection();        
        service.Configure<StudentsOptions>(config.GetSection(StudentsOptions.name));
    
    }
    

    此时报错了,无法从IConfigurationSection转换成Action<>。

    十分不解,最后发现是少了扩展类,Microsoft.Extensions.Options.ConfigurationExtensions

    我们通过 NuGet 添加这个

    PM>Install-Package Microsoft.Extensions.Options.ConfigurationExtensions 
    

    问题得到解决了。
    5. 补充后续代码

    static void Main(string[] args)
    {
        IConfigurationRoot config = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("//Config//students.json", true, true)
                .Build();
        var service = new ServiceCollection();
        //注入        
        service.Configure<StudentsOptions>(config.GetSection(StudentsOptions.name));
        
        var provider = service.BuildServiceProvider();
        
        var studentsOptions = provider.GetService<IOptionsMonitor<StudentsOptions>>().CurrentValue;
    }
    

    这样就可以很方便的把配置文件加载进来了,同时我们可以加上文件系统,对配置文件进行监听。
    6. 备注

    如果只是在Main方法使用,其实我们不需要用ServiceCollection来注入,用下面这种方法更方便简洁。

    static void Main(string[] args)
    {
        IConfigurationRoot config = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("//Config//students.json", true, true)
                .Build();
                
        var studentsOptions = config.GetSection(StudentsOptions.name).Get<StudentsOptions>();
    }
    

  • 相关阅读:
    作业
    Java总结
    十四周总结
    十二周课程总结
    十一周总结
    自我介绍
    第二次
    第十二周作业
    第九周作业
    第十三周课程总结
  • 原文地址:https://www.cnblogs.com/zhanwei103/p/13207627.html
Copyright © 2011-2022 走看看