這篇文章記錄怎麼直接使用 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 等類別
都具有差不多的行為。
參考:
ASP.NET Core的配置(4):多样性的配置来源[中篇]