【发布时间】:2020-01-23 13:56:39
【问题描述】:
我有以下包含数据库列表/数组的有效 json,
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Debug"
}
},
"settings": {
"name": "",
"path": ""
},
"Databases": [{
"key1": "",
"key2": "",
"key3": ""
},
{
"key1": "",
"key2": "",
"key3": ""
}
]
}
我在 C# 中使用 JsonConvert.DeserializeObject
如果还有将 json 放入 RootObject 列表的方法和类,它会很好用。
public static List<RootObject> GetConfig() {
System.IO.StreamReader s = new StreamReader(System.IO.Directory.GetCurrentDirectory() + "\\appsettings.json");
List<RootObject> cfg = JsonConvert.DeserializeObject<List<RootObject>>(s.ReadToEnd());
return cfg;
}
我现在想做的是有一个新方法,它返回一个只包含数据库的列表,(不是 json 中的日志记录、设置部分)
类似的东西
public static Databas GetDatabaseSetting(string key) {
System.IO.StreamReader s = new StreamReader(System.IO.Directory.GetCurrentDirectory() + "\\appsettings.json");
List<Databas> dbs = JsonConvert.DeserializeObject<List<Databas>>(s.ReadToEnd());
foreach(var c in dbs) {
if(c.key== key) {
return c;
}
}
return null;
}
但我无法让它发挥作用。
如何仅从 json 文件中的数据库设置部分创建数据库列表
【问题讨论】:
-
手动解析
appsettings.json并不常见。当使用IConfiguration和默认设置时,这一切都是开箱即用的。您是否有不同的要求迫使您手动解析appsettings.json? -
你不能只说“我想要那个部分”而不反序列化整个事情。另外,是什么阻止您返回
RootObject.Databases.FirstOrDefault(d => d.Key == key)?当然,这与@Kirk 所说的不同。
标签: c# json asp.net-core