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 に答える
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 に答える