3

我有 C# WebClient 返回的以下 JSON:

"\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。

我很迷茫,找不到任何关于此的文档。有人有线索吗?

4

3 回答 3

5

我相信这个问题实际上是在你试图反序列化的类中找到的。

您拥有的包装器属性未正确反序列化。如果它是你类中的一个对象,那么它应该可以工作,但如果它是一个字符串,我猜是这样,那么 Json 反序列化器将尝试反序列化它并发现它不是一个字符串。

于 2012-07-12T06:08:20.370 回答
4

我最近使用序列化结果中的字符串遇到了相同类型的反序列化异常,“Unexpected token: StartObject”。

似乎目标的属性声明不能与对象类型同名。在我的例子中,被反序列化的对象有一个 ZipCode 的属性,它是一个 ZipCode 类。

最终,将属性名称更改为类名称以外的名称解决了异常。

于 2015-11-26T01:44:05.040 回答
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 以查看它是否存在错误。

于 2012-05-08T19:45:57.493 回答