JavaScriptSerializer не может проанализировать тип данных - PullRequest
0 голосов
/ 20 сентября 2011

У меня есть некоторые данные 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)

Я получаю один корневой объект с ключом «data» и оцениваю другой объект с 2 дочерними элементами, с ключами «name» и «id» и соответствующими значениями, которые можно ожидать. Но когда я пытаюсь привести этот объект к моему типу UserData, он возвращает Nothing. В какой-то момент у меня работал этот код, но теперь, когда я возвращаюсь к нему и пытаюсь использовать его снова, кажется, что установился какой-то код гнили, и он перестал работать.

Вот как я пытаюсь получить десериализованные данные как объект UserData:

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

1 Ответ

0 голосов
/ 21 сентября 2011

Я смог решить эту проблему, изменив

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

на

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

Не совсем уверен, в чем заключается функциональная разница, но это дало мне тот результат, который я хотел.

...