首页 > 解决方案 > 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的字典,其中只有KeyBandKeyC键,跳过KeyA,因为它的Ids数组是空的。我在线阅读了配置绑定的行为,但据我所知,它应该将 Ids 绑定为 null,但在这里它只是不会在字典中生成键值对。

我尝试删除“Ids”属性,将我的配置保留为"KeyA": {}",但这仍然不起作用。我可以解析它的唯一方法是在数组中放入一些数字,但这显然不是我想要的。

我想知道是否无论如何我可以绑定这样一个键值对,我的数组中没有任何 Id。这似乎应该以某种方式支持开箱即用,但我不确定为什么它不工作以及如何解决它,而不实现一些 hacky 自定义配置加载器/绑定器。

标签: asp.net-coreconfigurationbindingoptions

解决方案


对于将来偶然发现此问题的任何人,我设法通过将数组设置为 null 来解决此问题,而不是像这样的空数组。

"Configurations": {
    "KeyA": {
      "Ids": null
    }
}

推荐阅读