{
"TestObjects": [
{"the": "goal"},
{"is": "to"},
{"deserialize": "this"},
{"simple": "array"},
{"of": "objects"},
{"into": "a"},
{"C#": "Dictionary"}
]
}
使用.NET System.Text.JSON。寻找一种方法来将每个对象都有两个字符串的对象数组(如上所示)转换为Dictionary<string,string>。
我已经看到了描述将对象化为Dictionary<string, string>[]
的答案,其中每个对象都被放置在不同的Dictionary<string, string>
中,这是可行的。例如,十个对象会产生一个包含十个字典的数组。下面的例子工作:
public class TestClass
{
public Dictionary<string, string>[] TestObjects { get; set; }
}
var stream = File.OpenRead(@"C:\test\test.json");
TestClass result = JsonSerializer.Deserialize<TestClass>(stream);
因此,参考上面的示例,目标是将其转换为形式为Dictionary<string, string> TestObjects { get; set; }
与Dictionary<string, string>[] TestObjects { get; set; }
谢谢你
更新-答案
得到了几个可行和有用的答案。我使用了Sonny N的答案,它涉及简单地更改JSON数据格式,以便将其直接转换为字典:
{
"TestObjects": {
"the": "goal",
"is": "to",
"convert": "this",
"simple": "array",
"of": "objects",
"into": "a",
"C#": "Dictionary"
}
}
有时,对于这样的问题,回答的人无法知道JSON格式是否可编辑,因为在某些情况下,它可能通过网络等接收,并且必须按原样进行格式化。在我的情况下,格式是手动编辑的,而且很灵活,所以我能够使用更好的格式。然而,其他优秀的答案适用于传入的JSON格式不灵活的情况。
3条答案
按热度按时间mnowg1ta1#
为了使它成为一个字典,它必须是这样的格式:
但是,您可以添加另一个只读属性,将字典数组转换为一个字典。
fzsnzjdm2#
你可以使用一个简单的转换器。
用
[JsonConverter(...)]
装饰房产:自定义转换器从对象数组中读取每个属性和值,并将它们用作字典的键和值。
假设所有 keys(属性)都有不同的名称。
当
Utf8JsonReader
到达数组的末尾时,即当[Utf8JsonReader].TokenType == JsonTokenType.EndArray
时,返回字典:注意:这里没有真实的错误检查。我把它留给您,因为您知道真实的JSON包含什么。
a7qyws3x3#
可以将数组转换为字典
但是记住字典应该有唯一的键,否则你会得到一个异常
或者,如果你想转换成一个类,你需要写一个json转换器。