我正在尝试将JSON文件绑定到dotnet核心项目中用于配置设置的模型。
json如下:
"Settings": {
"Values": [
{ "Value1": "1" },
{ "Value2": "2" }
]}
我的模型如下:
public class Settings
{
public List<Value> Values{ get; set; }
}
public class Value
{
public string Value1 { get; set; }
public string Value2 { get; set; }
}
我绑定以下内容:
var settings = _configuration.GetSection("Settings").Get<Settings>();
但这会导致settings
在列表中包含两个Value
对象-第一个Value
对象具有Value1 = 1
和Value2 = null
,第二个{{ 1}}对象具有Value
和Value1 = null
。我该如何绑定,使其Value2 = 2
在settings
中只有一个Value
对象,并且填充了两个属性?
这与此处的建议不同: https://stackoverflow.com/questions/51488845/how-to-read-a-string-array-in-appsettings-json
这是因为在这种情况下,数组中的每个对象都具有不同的属性,而在建议的重复项中,所有对象都是一致的。
答案 0 :(得分:1)
获取值的最简单方法可能是使您的Class看起来像这样:
public class Settings
{
public Dictionary<string, string>[] Values{ get; set; }
}
这将被解析为Array
个项目中的Dictionary
,其中每个项目将仅包含您的Values的一个键值。
更新:
您可以在Settings
类内添加一个函数,以将所有设置作为1个字典:
public Dictionary<string, string> GetSettings()
{
var settingsValues = new Dictionary<string, string>();
foreach (var valueDict in Values)
{
foreach (var setting in valueDict)
{
settingsValues.Add(setting.Key, setting.Value);
}
}
return settingsValues;
}
答案 1 :(得分:0)
好,所以它实际上需要看起来像:
public class Settings
{
public List<Dictionary<string, string>> Values{ get; set; }
}
由于JSON Values
实际上是一个字典数组。
要执行以下操作:
public class Settings
{
public Dictionary<string, string> Values{ get; set; }
}
JSON必须看起来像:
"Settings": {
"Values": {
"Value1": "1",
"Value2": "2"
}
}