.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>();
}

posted @ 2020-06-29 13:51  詹伟  阅读(1477)  评论(1编辑  收藏  举报