使用 Json.net 反序列化时"Unexpected token: StartObject"



我有以下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 以查看它是否是错误。

相关内容

  • 没有找到相关文章

最新更新