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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM