asp.net-core - ASPNET Core 选项绑定不填充字典键/值对
问题描述
我有以下json配置
"Configurations": {
"KeyA": {
"Ids": []
},
"KeyB": {
"Ids": [1, 2, 3]
},
"KeyC": {
"Ids": [1, 2, 3],
"OptionalData": "asdf"
}
}
然后将其读入以下对象
public class AppConfiguration
{
public Dictionary<ConfigType, ConfigurationData> Configurations {get; set;} = new Dictionary<ConfigType, ConfigurationData>();
}
public class ConfigurationData
{
public HashSet<int> Ids {get;set;} = new HashSet<int>();
public string OptionalData = "";
}
public Enum ConfigType
{
KeyA = 1,
KeyB = 2,
KeyC = 3
}
然后我在ConfigureServices(IServiceCollection services)
方法中使用
services.Configure<AppConfiguration>(this.Configuration);
但是,我注意到配置绑定生成 myAppConfiguration
的字典,其中只有KeyB
andKeyC
键,跳过KeyA
,因为它的Ids
数组是空的。我在线阅读了配置绑定的行为,但据我所知,它应该将 Ids 绑定为 null,但在这里它只是不会在字典中生成键值对。
我尝试删除“Ids”属性,将我的配置保留为"KeyA": {}"
,但这仍然不起作用。我可以解析它的唯一方法是在数组中放入一些数字,但这显然不是我想要的。
我想知道是否无论如何我可以绑定这样一个键值对,我的数组中没有任何 Id。这似乎应该以某种方式支持开箱即用,但我不确定为什么它不工作以及如何解决它,而不实现一些 hacky 自定义配置加载器/绑定器。
解决方案
对于将来偶然发现此问题的任何人,我设法通过将数组设置为 null 来解决此问题,而不是像这样的空数组。
"Configurations": {
"KeyA": {
"Ids": null
}
}
推荐阅读
- alloy - 如何对函数体使用集合理解
- javascript - 如何在 react-native 中为所有项目导出 const
- reactjs - 重新渲染 NextJS 路由(React 组件)
- python - 使用 pandas.to_datetime() 推断日期时如何检查月份顺序是否不明确?
- javascript - 如何防止导航栏抖动?
- sql-server - 从 SQL Server 中的 xml 将不同的元素放入一列
- kademi - 如何确定配置文件是否已经在 Journy Decision 节点中设置了密码
- css - GRID CSS — 我怎么能不定义网格行端?
- mysql - 从 4 行 1 列中获取数据并分成 9 列的正确 MySQL 方法是什么?
- google-apps-script - 如何在最初加载表单时使用 Google Apps 脚本更改现有的 Google 表单元素