0

次のような JSON データがあります。

{
    "data":
    [{
        "name":"John Smith",
        "id":"12345"
    }]
}

次のようなシリアライズ可能なクラスのペアがあります。

<Serializable()> _
Public Class User
    Private _name As String
    Private _id As String

    Public Property name() As String
        Get
            Return _name
        End Get
        Set(ByVal value As String)
            _name = value
        End Set
    End Property

    Public Property id() As String
        Get
            Return _id
        End Get
        Set(ByVal value As String)
            _id = value
        End Set
    End Property
End Class

<Serializable()>
Public Class UserData
    Private _data As List(Of User)

    Public Property data() As List(Of User)
        Get
            Return (_data)
        End Get

        Set(ByVal value As List(Of User))
            _data = value
        End Set
    End Property

End Class

オブジェクトとして逆シリアル化しようとすると:

Dim serializer As New JavaScriptSerializer()
Dim userResult As Object = serializer.DeserializeObject(json)

キー「データ」を持つ 1 つのルート オブジェクトを取得し、キー「name」と「id」、および予想される適切な値を持つ 2 つの子を持つ別のオブジェクトの値を取得します。しかし、そのオブジェクトを自分のUserData型にキャストしようとすると、 が返されますNothing。私はこのコードをある時点で動作させていましたが、今はそれに戻って再び使用しようとしていますが、コードの腐敗が始まり、動作を停止しているようです.

UserDataデシリアライズされたデータをオブジェクトとして取得しようとしている方法は次のとおりです。

Dim userResult As UserData = TryCast(serializer.DeserializeObject(json), UserData)
4

1 に答える 1

0

変更することでこの問題を修正できました

Dim userResult As UserData = TryCast(serializer.DeserializeObject(json), UserData)

Dim userResult As UserData = serializer.Deserialize(Of UserData)(json)

ここでの機能的な違いが何であるかは正確にはわかりませんが、それで私が望んでいた結果が得られました.

于 2011-09-21T16:55:10.143 に答える