我有一个类似
的JSON{
"40": {
"name": "Team A vs Team B",
"value": {
"home": 1,
"away": 0
}
},
"45": {
"name": "Team A vs Team C",
"value": {
"home": 2,
"away": 0
}
},
"50": {
"name": "Team A vs Team D",
"value": {
"home": 0,
"away": 2
}
}
}
所以这是一种比赛清单。我有课程将其反序列化为:
public class Match
{
[JsonProperty(PropertyName = "name")]
public string Name { get; set; }
[JsonProperty(PropertyName = "value")]
public Value Values { get; set; }
}
public class Value
{
[JsonProperty(PropertyName = "home")]
public int Home { get; set; }
[JsonProperty(PropertyName = "away")]
public int Away { get; set; }
}
我试图像这样反序列化json:
var mList= JsonConvert.DeserializeObject<List<Match>>(jsonstr);
但我得到例外:
无法反序列化当前的JSON对象(例如{&#34; name&#34;:&#34; value&#34;}) 进入类型&#39; System.Collections.Generic.List`1 [ClassNameHere]&#39;因为 该类型需要一个JSON数组(例如[1,2,3])来反序列化 正确。
如果我更改代码如下:
var mList= JsonConvert.DeserializeObject(jsonstr);
然后它序列化但不作为列表,作为对象。我怎样才能解决这个问题?
答案 0 :(得分:8)
在这种情况下,您应该向反序列化程序询问 IDictionary<string, Match>
var mList= JsonConvert.DeserializeObject<IDictionary<string, Match>>(jsonstr);
并且第一个元素将具有键&#34; 40&#34; ,并且值将是Match
实例
其他的话这一部分:
"40": {
"name": "Team A vs Team B",
"value": {
"home": 1,
"away": 0
}
将导致KeyValuePair:
key - "40"
value - Match { Name = "Team", ... }
答案 1 :(得分:4)
"50": {
"name": "Team A vs Team D",
"value": {
"home": 0,
"away": 2
}
}
desirializer工作正常。在这个json代码value
是一个对象。
试试这个:
"50": {
"name": "Team A vs Team D",
"value": [{
"home": 0,
"away": 2
}]
}
在这个json代码中,value
被声明为一个对象数组。请注意[
和]