c# - 如何将配置绑定到 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
这是因为在这种情况下,数组中的每个对象都具有不同的属性,而在建议的副本中,所有对象都是一致的。
解决方案
获取值的最简单方法可能是让您的 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;
}
推荐阅读
- mfc - MFC:使用 CTreeCtrl 和 CToolbar 创建一个类(CWnd?)
- javascript - 如何在选择另一个元素时自动打开一个元素?
- python - 无法获得 python HERE 地图反向地理编码的正确语法
- javascript - 无法通过注册表单将用户添加到数据库
- regex - 如何通过正则表达式对 mongodb 计数结果进行分组?
- sql - 如何使用 Amazon redshift 正确编写此查询?
- java - Quartz 作业抛出 InvalidDataAccessApiUsageException: no transaction is in progress;
- java - Java Swing如何缩放三角形
- sharepoint - 如何指定 Sharepoint 凭据?
- python - 是否有 Python 版本的 .h 和 .cpp 文件?