使用Json.net反序列化时出现“意外的令牌:StartObject”

时间:2012-05-08 19:38:26

标签: c# json json.net

我有以下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位。

我很丢失,找不到任何关于此的文档。有人知道吗?

3 个答案:

答案 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;