我有一个像 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 对象(例如 {"名称":"值"}) 类型为"System.Collections.Generic.List'1[ClassNameHere]",因为 该类型需要一个 JSON 数组(例如 [1,2,3])来反序列化 正确。
如果我像这样更改代码:
var mList= JsonConvert.DeserializeObject(jsonstr);
然后它序列化,但不作为列表,作为对象。我该如何解决这个问题?
在这种情况下,您应该向反序列化程序询问IDictionary<string, Match>
var mList= JsonConvert.DeserializeObject<IDictionary<string, Match>>(jsonstr);
第一个元素将具有键"40",值将是Match
实例
换句话说这部分:
"40": {
"name": "Team A vs Team B",
"value": {
"home": 1,
"away": 0
}
将产生键值对:
key - "40"
value - Match { Name = "Team", ... }
"50": {
"name": "Team A vs Team D",
"value": {
"home": 0,
"away": 2
}
}
欲望器工作正常。在此 json 代码中,value
是一个对象。试试这个:
"50": {
"name": "Team A vs Team D",
"value": [{
"home": 0,
"away": 2
}]
}
在此 json 代码中,value
声明为对象数组。请注意[
和]