私はここで小さな見落としをしているだけだと感じています.2番目(または3番目)の目がそれを解決するのに役立つと思います. これが私がやったことです:
- Web サービスへのリクエストを行いました
- その Web サービスから JSON 応答を受け取りました
- その 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)
どんなアイデアでも大歓迎です!
よろしくね、ジョーダン