JSON.Net - 无法将当前 json 对象(例如 "name":"value")反序列化为类型 'system.collections.generic.l
Posted
技术标签:
【中文标题】JSON.Net - 无法将当前 json 对象(例如 "name":"value")反序列化为类型 \'system.collections.generic.list`1【英文标题】:JSON.Net - cannot deserialize the current json object (e.g. "name":"value") into type 'system.collections.generic.list`1JSON.Net - 无法将当前 json 对象(例如 "name":"value")反序列化为类型 'system.collections.generic.list`1 【发布时间】:2015-02-23 02:32:43 【问题描述】:我有一个类似 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 对象(例如 "name":"value") 进入类型“System.Collections.Generic.List`1[ClassNameHere]”,因为 该类型需要一个 JSON 数组(例如 [1,2,3])来反序列化 正确。
如果我像这样更改代码:
var mList= JsonConvert.DeserializeObject(jsonstr);
然后它序列化但不是作为一个列表,作为一个对象。我怎样才能解决这个问题?
【问题讨论】:
在 jsonstr 的开头和结尾放一个 [](括号) How can I parse a JSON string that would cause illegal C# identifiers? 的可能重复项 【参考方案1】:在这种情况下,您应该向 Deserializer 询问 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
将导致 KeyValuePair:
key - "40"
value - Match Name = "Team", ...
【讨论】:
你不应该更改文档,而是使用编程代码来管理文档。 @SterlingDiaz 不知道你是什么意思?我按照 JSON 结构展示了如何在 C# 中表示它......所以,我真的不确定你的意思是什么【参考方案2】:"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
被声明为一个对象数组。注意[
和]
【讨论】:
以上是关于JSON.Net - 无法将当前 json 对象(例如 "name":"value")反序列化为类型 'system.collections.generic.l的主要内容,如果未能解决你的问题,请参考以下文章
使用来自 URL 的 JSON.NET 反序列化 JSON 数组
Json.Net 中的“当前错误上下文错误与请求的错误不同”异常