我有以下C# WebClient返回的JSON:
"nnn{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}nnn"
或者,更清楚地:
{
"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);
但收到以下错误:
读取字符串时出错。意外令牌:启动对象。第 7 行,位置 2。
我很迷茫,找不到任何关于此的文档。有人知道了吗?
问题实际上出在您尝试反序列化的类中。
您拥有的包装器属性未正确反序列化。如果它是类中的一个对象,那么它应该可以工作,但如果它是一个字符串,我猜,那么 Json 反序列化器将尝试反序列化它并发现它不是一个字符串。
我最近遇到了相同类型的反序列化异常,"意外令牌:StartObject",使用序列化结果中的字符串。
目标的属性声明似乎不能与对象类型同名。在我的例子中,被反序列化的对象具有ZipCode的属性,它是ZipCode的一类。
最终,将属性名称更改为类名称以外的其他名称解决了异常。
这不会在 LINQPad 中为我引发任何异常:
JsonConvert.DeserializeObject<JsonResult>("nnn{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}nnn")
如果得到不同的结果,您可能需要尝试不同版本的 JSON.NET 以查看它是否是错误。