C# 带字典的asp.net核心ioptions
我正在尝试从appsettings.json文件中读取字母作为字典。我的json包含: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
"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”,…}