我有一个像这样的JSON字符串:
[{"633" : [{"8768" : "hello","8769" : "world"}],"634" : [{"8782" : "on","8783" : "No"}]}]
我正在尝试反序列化/解析此字符串。
这是我到目前为止所做的:
var arrString = "[{\"633\" : [{\"8768\" : \"hello\",\"8769\" : \"world\"}],\"634\" : [{\"8782\" : \"on\",\"8783\" : \"No\"}]}]"
var attendeeArray = JsonConvert.DeserializeObject<List<Dictionary<int, string>>>(arrString); //error
这给了我错误:附加信息:解析值时遇到意外的字符:[。路径'[0] .633',第1行,第11位。
我想知道是不是因为我正在使用int, string
,它应该是int, array (int, string)
?
更多信息
这是关于我之前回答的问题: How to get the values and keys from a json deserialized/parsed string in C#?
但现在我需要数组内的数组。
答案 0 :(得分:2)
在这种情况下,键/值对象实际上包装在数组中。这可以反序列化为类型optional func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool)
,如下所示:
List<Dictionary<int, List<Dictionary<int, string>>>>
结构基本上是:
var arrString = "[{\"633\" : [{\"8768\" : \"hello\",\"8769\" : \"world\"}],\"634\" : [{\"8782\" : \"on\",\"8783\" : \"No\"}]}]";
var attendeeArray = JsonConvert.DeserializeObject<List<Dictionary<int, List<Dictionary<int, string>>>>>(arrString);
答案 1 :(得分:1)
可能值得重新考虑您的JSON架构,但如果您想要走这条路线,那么您可以通过以下方式遍历JSON:
dynamic numList = JsonConvert.DeserializeObject(
@"[{
""633"": [{
""8768"": ""hello"",
""8769"": ""world""
}],
""634"": [{
""8782"": ""on"",
""8783"": ""No""
}]
}]"
);
foreach (dynamic recordList in numList)
foreach (dynamic record in recordList)
{
//recordKey would be "633" for:
//"633": [{
// "8768": "hello"
//}]
var recordKey = record.Name;
//.First.First because of the awkward JSON structure.
foreach (dynamic entry in record.First.First)
{
//for {"8768": "hello"}
//key would be "8768", value would be "hello"
var key = entry.Name;
var value = entry.Value;
}
}
然后您可以获取recordKey和条目键/值,并使用它们(包括将它们填充到您喜欢的任何格式化数据结构中)。
比尝试使用键入的反序列化值更好:
List<Dictionary<int, List<Dictionary<int, string>>>>
...反正。