我有以下JSON,C#WebClient返回:
"\n\n\n{\n \"resultCount\":1,\n \"results\": [\n{\"wrapperType\":\"artist\", \"artistType\":\"Artist\", \"artistName\":\"Jack Johnson\", \"artistLinkUrl\":\"http://itunes.apple.com/us/artist/jack-johnson/id909253?uo=4\", \"artistId\":909253, \"amgArtistId\":468749, \"primaryGenreName\":\"Rock\", \"primaryGenreId\":21}]\n}\n\n\n"
或更明确地说:
{
"resultCount ":1,
"results ":[
{
"wrapperType ":"artist ",
"artistType ":"Artist ",
"artistName ":"Jack Johnson ",
"artistLinkUrl ":"http://itunes.apple.com/us/artist/jack-johnson/id909253?uo=4 ",
"artistId ":909253,
"amgArtistId ":468749,
"primaryGenreName ":"Rock ",
"primaryGenreId ":21
}
]
}
我已尝试将其反序列化为类,如下所示:
thejsonresult = JsonConvert.DeserializeObject<JsonResult>(WebRequest.Json);
但收到以下错误:
读取字符串时出错。意外的令牌:StartObject。第7行,第2位。
我很丢失,找不到任何关于此的文档。有人知道吗?
答案 0 :(得分:5)
我认为问题实际上是在您尝试反序列化的课程中找到的。
您的包装器属性未正确反序列化。如果它是你班级中的一个对象,那么它应该可以工作,但如果它是一个字符串,我猜,那么Json反序列化器会尝试反序列化它并发现它不是一个字符串。
答案 1 :(得分:3)
在LINQPad中,这不会给我带来任何例外:
JsonConvert.DeserializeObject<JsonResult>("\n\n\n{\n \"resultCount\":1,\n \"results\": [\n{\"wrapperType\":\"artist\", \"artistType\":\"Artist\", \"artistName\":\"Jack Johnson\", \"artistLinkUrl\":\"http://itunes.apple.com/us/artist/jack-johnson/id909253?uo=4\", \"artistId\":909253, \"amgArtistId\":468749, \"primaryGenreName\":\"Rock\", \"primaryGenreId\":21}]\n}\n\n\n")
如果您得到不同的结果,您可能想尝试使用不同版本的JSON.NET来查看它是否是错误。
答案 2 :(得分:3)
我最近使用序列化结果中的字符串遇到了相同类型的反序列化异常“Unexpected token:StartObject”。
&#xA;&#xA;似乎目标的属性声明不能与对象类型同名。在我的例子中,被反序列化的对象具有ZipCode的属性,ZipCode是一类ZipCode。
&#xA;&#xA;最终,将属性名称更改为类名以外的名称可解决该异常。
&#xA;