首页 > 解决方案 > 如何将配置绑定到 JSON 对象数组 .Net Core

问题描述

我正在尝试将 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,第二个Value对象具有Value1 = null& Value2 = 2。如何绑定,使其settings只有一个Value对象Values,同时填充两个属性?

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

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

标签: c#json.net-coreconfiguration

解决方案


获取值的最简单方法可能是让您的 Class 看起来像这样:

public class Settings
{
    public Dictionary<string, string>[] Values{ get; set; }
}

这将被解析为一个Array项目Dictionary,其中每个项目将仅包含您的值的 1 个键值。

更新:

您可以在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;
}

推荐阅读