asp.net 带有字典的核心 ioptions

asp.net core ioptions with a dictionary

我正在尝试将 appsettings.json 文件中的 Letters 作为 Dictionary 阅读。我的 json 包含:

    "Words": [
      "Alpha",
      "Beta",
      "Gama"
    ],
    "Letters": [
      { "A": "Alpha" },
      { "B": "Bravo" },
      { "C": "Charlie" }
    ],

我使用配置class:

public class AppSettingsConfiguration
{
    public List<string> Words { get; set; } = default!;
    public Dictionary<string, string> Letters { get; set; } = default!;
}

属性 Words 已更正从 .json 读取,但 Letters 抛出异常“无法创建实例”属于 'System.String' 类型,因为它缺少 public 无参数构造函数。'

如果我试过

List<(string, string)> Letters { get; set; }
or
List<KeyValuePair<string, string>> Letters { get; set; }

我得到了所有 3 行,但都是空的 - (null, null)

阅读字典的正确 属性 是什么?

字典在 C# 中的序列化方式不同。请参阅以下JSON:

"Letters": {
  "A": "Alpha",
  "B": "Bravo",
  "C": "Charlie"
}

遗憾的是符合这个数据的模型是List<Dictionary<string, string>>.
没有停止数据太像:

{
    "Words": [
        "Alpha",
        "Beta",
        "Gama"
    ],
    "Letters": [
        { "A": "Alpha" }, 
        { "A": "Alpha", "B": "Bravo" },
        { "B": "Bravo" }
    ]
}

所以它不是 KeyValuePair<string, string> 而是完整的词典。

如果您想回到 List<KeyValuePair<string, string>>,您可以使用简单的 SelectMany(x=> x)

现场演示:https://dotnetfiddle.net/CFtWm3