ASPNET Core 选项绑定不填充字典 key/value 对
ASPNET Core Options Binding does not populate dictionary key/value pair
我有以下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);
但是,我注意到配置绑定生成了我的 AppConfiguration
字典,其中只有 KeyB
和 KeyC
键, 跳过了 KeyA
,因为它的 Ids
数组是空的 。我在网上阅读了配置绑定的行为,但据我所知,它应该将 ID 绑定到 null,但这里它只是不在字典中生成一个键值对。
我尝试删除“Id”属性,保留我的配置 "KeyA": {}"
,但这仍然无效。我能让它解析的唯一方法是在数组中放入一些数字,但这显然不是我想要的。
我想知道我是否可以绑定这样一个键值对,我的数组中没有任何 ID。这似乎应该以某种方式得到开箱即用的支持,但我不确定为什么它不起作用以及我如何解决它,而不实施一些 hacky 自定义配置 loader/binder.
对于以后偶然发现此问题的任何人,我设法通过将我的数组设置为 null 而不是像这样的空数组来解决此问题。
"Configurations": {
"KeyA": {
"Ids": null
}
}
我有以下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);
但是,我注意到配置绑定生成了我的 AppConfiguration
字典,其中只有 KeyB
和 KeyC
键, 跳过了 KeyA
,因为它的 Ids
数组是空的 。我在网上阅读了配置绑定的行为,但据我所知,它应该将 ID 绑定到 null,但这里它只是不在字典中生成一个键值对。
我尝试删除“Id”属性,保留我的配置 "KeyA": {}"
,但这仍然无效。我能让它解析的唯一方法是在数组中放入一些数字,但这显然不是我想要的。
我想知道我是否可以绑定这样一个键值对,我的数组中没有任何 ID。这似乎应该以某种方式得到开箱即用的支持,但我不确定为什么它不起作用以及我如何解决它,而不实施一些 hacky 自定义配置 loader/binder.
对于以后偶然发现此问题的任何人,我设法通过将我的数组设置为 null 而不是像这样的空数组来解决此问题。
"Configurations": {
"KeyA": {
"Ids": null
}
}