1

私はここで小さな見落としをしているだけだと感じています.2番目(または3番目)の目がそれを解決するのに役立つと思います. これが私がやったことです:

  1. Web サービスへのリクエストを行いました
  2. その Web サービスから JSON 応答を受け取りました
  3. その JSON を文字列に読み込みます

文字列には、JSON 出力が正常に含まれています。ただし、ここで問題が発生します。逆シリアル化された JSON をキャストするパブリック クラスを作成しました。ただし、(JSON.NET を使用して) JSON 文字列をクラスにキャストしようとすると、次のエラーが表示されます。

Cannot deserialize the current JSON array (e.g. [1,2,3]) into type  m      'Sandbox.youtube+Item' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly.

To fix this error either change the JSON to a JSON object (e.g. {"name":"value"}) or change the deserialized type to an array or a type that implements a collection interface (e.g. ICollection, IList) like List<T> that can be deserialized from a JSON array. JsonArrayAttribute can also be added to the type to force it to deserialize from a JSON array.

JSON は次のようになります。

{
"kind": "youtube#searchListResponse",
"etag": "\"Fn7tolrWrLXf7uknBpwCU9OfMA8/AgytE2CN3Aj3J6OFJ5iDqg8-Hbw\"",
"pageInfo": {
 "totalResults": 1000000,
 "resultsPerPage": 50
     },
  "nextPageToken": "CDIQAA",
  "items": [
   {
  "kind": "youtube#searchResult",
   "etag": "\"Fn7tolrWrLXf7uknBpwCU9OfMA8/mQk0CDCRDq-8Xy5YSW9FLLA7B3g\"",
   "id": {
"kind": "youtube#video",
"videoId": "BJ2q017EL08"
}
 }

(コピー/貼り付け時にいくつかの括弧を見逃した可能性があります)

私の公開クラスは次のようになります。

Public Class Rootobject

    Public Property kind As String
    Public Property etag As String
    Public Property pageInfo As Pageinfo
    Public Property nextPageToken As String
    Public Property items() As Item
End Class

Public Class Pageinfo
    Public Property totalResults As Integer
    Public Property resultsPerPage As Integer
End Class

Public Class Item
    Public Property kind As String
    Public Property etag As String
    Public Property id As Idprop
End Class

Public Class Idprop
    Public Property kind As String
    Public Property videoId As String
End Class

そして、私はこのようにキャストしようとします:

Dim ent As Rootobject = TryCast(Json.JsonConvert.DeserializeObject(Of Rootobject)(webresponse), Rootobject)

どんなアイデアでも大歓迎です!

よろしくね、ジョーダン

4

1 に答える 1