如何将配置绑定到JSON对象.Net Core数组

时间:2019-05-28 20:05:18

标签: c# json .net-core configuration

我正在尝试将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 = 1Value2 = null,第二个{{ 1}}对象具有ValueValue1 = null。我该如何绑定,使其Value2 = 2settings中只有一个Value对象,并且填充了两个属性?

这与此处的建议不同: https://stackoverflow.com/questions/51488845/how-to-read-a-string-array-in-appsettings-json

这是因为在这种情况下,数组中的每个对象都具有不同的属性,而在建议的重复项中,所有对象都是一致的。

2 个答案:

答案 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"
    }
}