Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带字典的asp.net核心ioptions_C#_Json_.net Core_Appsettings - Fatal编程技术网

C# 带字典的asp.net核心ioptions

C# 带字典的asp.net核心ioptions,c#,json,.net-core,appsettings,C#,Json,.net Core,Appsettings,我正在尝试从appsettings.json文件中读取字母作为字典。我的json包含: "Words": [ "Alpha", "Beta", "Gama" ], "Letters": [ { "A": "Alpha" }, { "B": "Br

我正在尝试从appsettings.json文件中读取字母作为字典。我的json包含:

    "Words": [
      "Alpha",
      "Beta",
      "Gama"
    ],
    "Letters": [
      { "A": "Alpha" },
      { "B": "Bravo" },
      { "C": "Charlie" }
    ],
我使用配置类:

public class AppSettingsConfiguration
{
    public List<string> Words { get; set; } = default!;
    public Dictionary<string, string> Letters { get; set; } = default!;
}
公共类应用程序设置配置
{
公共列表字{get;set;}=default!;
公共字典字母{get;set;}=default!;
}
属性Words已从.json读取,但Letters抛出异常“无法创建类型为“System.String”的实例,因为它缺少公共无参数构造函数。”

如果我试过

List<(string, string)> Letters { get; set; }
or
List<KeyValuePair<string, string>> Letters { get; set; }
列出字母{get;set;}
或
列出字母{get;set;}
我得到所有3行,但都是空的-(null,null)


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

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

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

不幸的是,与此数据匹配的模型是
List

没有任何停止数据看起来像:

{
    "Words": [
        "Alpha",
        "Beta",
        "Gama"
    ],
    "Letters": [
        { "A": "Alpha" }, 
        { "A": "Alpha", "B": "Bravo" },
        { "B": "Bravo" }
    ]
}
所以这里不是
KeyValuePair
,而是一本完整的字典

如果您想回到
列表
,您可以使用一个简单的
SelectMany(x=>x)


现场演示:

不幸的是,匹配此数据的模型是
列表
。没有任何停止数据看起来像
{“A”:“Alpha”},{“A”:“Alpha”,“B”:“Bravo”},{“B”:“Bravo”}
。所以它不是
KeyValuePair
,而是一个完整的字典。
字母
是一个数组,而不是字典。它包含属性名为
A
B
C
等的元素,因此无法将其反序列化为属性名为
Key
Value
KeyValuePair
类。字典应该是
“字母”:{“A”:“Alpha”,“B”:“Bravo”,…}