Sef*_*efa 6 c# json json.net json-deserialization
我有一个类似的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
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以它是一种匹配列表.我有课程将其反序列化为:
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; }
}
Run Code Online (Sandbox Code Playgroud)
我试图像这样反序列化json:
var mList= JsonConvert.DeserializeObject<List<Match>>(jsonstr);
Run Code Online (Sandbox Code Playgroud)
但我得到例外:
无法将当前JSON对象(例如{"name":"value"})反序列化为类型'System.Collections.Generic.List`1 [ClassNameHere]',因为该类型需要JSON数组(例如[1,2,3] )正确反序列化.
如果我改变代码如:
var mList= JsonConvert.DeserializeObject(jsonstr);
Run Code Online (Sandbox Code Playgroud)
然后它序列化但不作为列表,作为对象.我怎样才能解决这个问题?
在这种情况下,您应该问Deserializer IDictionary<string, Match>
var mList= JsonConvert.DeserializeObject<IDictionary<string, Match>>(jsonstr);
Run Code Online (Sandbox Code Playgroud)
并且第一个元素将具有键"40"并且值将是Match实例
换句话说这部分:
"40": {
"name": "Team A vs Team B",
"value": {
"home": 1,
"away": 0
}
Run Code Online (Sandbox Code Playgroud)
将导致KeyValuePair:
key - "40"
value - Match { Name = "Team", ... }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22329 次 |
| 最近记录: |