使用 JsonConfigurationProvider 取得 json config

  • 346
  • 0
  • 2019-03-23

這篇文章記錄怎麼直接使用 JsonConfigurationProvider 取 json config 

JsonConfigurationProvider 是用來存取 json 的 key/value 的設定。

在 Microsoft.Extensions.Configuration.Json.dll 裡

建立好乾淨的專案後,要先將它引用進來

dotnet add package Microsoft.Extensions.Configuration.Json

這個類別實作的基本想法是 你給我一段 json 的串流,

讓我解析,之後再給我個對應位置的節點,我嘗試看看是否能夠給你值。

string jsonText = "{\"a\":\"apple\"}";
JsonConfigurationProvider provider = new JsonConfigurationProvider(new JsonConfigurationSource());
provider.Load(new MemoryStream(Encoding.Default.GetBytes(jsonText)));
string s;
if(provider.TryGet("a", out s))
{
    Console.WriteLine(s);
    // 印出 apple
}

這樣是可以用,但設定寫在程式裡總覺得有點 hard code的感覺。

然而,JsonConfigurationProvider 繼承 FileConfigurationProvider

使得 JsonConfigurationProvider 擁有讀取某個指定位置的內容的行為。

寫法如下

JsonConfigurationSource source = new JsonConfigurationSource(); 
source.FileProvider = new PhysicalFileProvider(Directory.GetCurrentDirectory()); 
source.Path = "test.json"; 
JsonConfigurationProvider provider = new JsonConfigurationProvider(source);
provider.Load();
string s;
if(provider.TryGet("a", out s))
{
    Console.WriteLine(s);
    // 印出 apple
}

JsonConfigureSource 必須設定 FileProvider 與 Path 屬性

在 FileConfigurationProvider.Load 的程式裡,會去判斷 FileProvider 並將 Path 傳給 FileProvider 取得來源。

JsonConfigureSource 裡有個 Optional 參數, 預設當沒有 FileProvider 或是檔案不存在時拋出錯誤,設為 true 就不會。

若檔案存在,之後將取得的串流,傳回子類別 Load(stream) 進行解析。

所以還有其他 XmlConfigurationProvider, IniConfigurationProvider 等類別

都具有差不多的行為。

 

參考:

https://github.com/aspnet/Extensions/blob/master/src/Configuration/Config.Json/src/JsonConfigurationProvider.cs

https://github.com/aspnet/Extensions/blob/master/src/Configuration/Config.FileExtensions/src/FileConfigurationProvider.cs

ASP.NET Core 中的檔案提供者

ASP.NET Core的配置(4):多样性的配置来源[中篇]