Я пытаюсь десериализовать простой массив JSON в объекты .NET, используя библиотеку JSON.NET в Visual Basic.
Ради жизни я не могу понять, что я делаю здесь неправильно.Моя строка JSON десериализуется в соответствующие объекты (всего 9), но ни одно из свойств не заполняется.
Мой код:
Public Class result
Public Property id As Integer
Public Property vote_percentage As String
Public Sub New()
End Sub
Public Sub New(ByVal id As Integer, ByVal vote_percentage As String)
Me.id = id
Me.vote_percentage = vote_percentage
End Sub
End Class
Данные JSON, которые я пытаюсь десериализовать, выглядят так:
[{"finalist": {"id":12, "vote_percentage": "28"}}, { "финалист": { "ID": 13, "vote_percentage": "6"}}, { "финалист": { "ID": 14, "vote_percentage":"4"}}, { "финалист": { "ID": 15, "vote_percentage": "3"}}, { "финалист": { "ID": 16, "vote_percentage": "7"}},{ "финалист": { "ID": 17, "vote_percentage": "1"}}, { "финалист": { "ID": 18, "vote_percentage": "47"}}, { "финалист": {"id": 19, "voice_percentage": "2"}}, {"finalist": {"id": 20, "voice_percentage": "1"}}]
Наконец, моя десериализация:
Dim Results As New List(Of result)
Results = JsonConvert.DeserializeObject(Of List(Of result))(_result)
В результате получается 9 объектов, которым не назначены значения свойств.
Я ломаю себе голову, поэтому, если бы кто-то бросил мне кость, я был бы признателен.
Спасибо.
ОБНОВЛЕНИЕ:
Итак, я внес изменения, которые заставили это работать:
- Изменен мой класс результатов, чтобы он содержалфиналист свойства типа finalist
Создан финалист нового класса со свойствами id и voice_percentage
Public Class finalist
Public Property id As Integer
Public Property vote_percentage As String
Public Sub New()
End Sub
Public Sub New(ByVal id As Integer, ByVal vote_percentage As String)
Me.id = id
Me.vote_percentage = vote_percentage
End Sub
End Class
Public Class result
Public Property finalist As finalist
Public Sub New()
finalist = New finalist
End Sub
Public Sub New(ByVal id As Integer, ByVal vote_percentage As String)
Me.finalist = New finalist(id, vote_percentage)
End Sub
End Class
Оставил десериализацию в покое:
_result = System.Text.Encoding.ASCII.GetString(data)
Dim Results As New List(Of result)
Results = JsonConvert.DeserializeObject(Of List(Of result))(_result)
RaiseEvent VoteCompleted(loopCounter, _VoteCount, time, _result)
И это работает.
Заметка для новых людей (таких как я).При использовании JSON.NET необходимо иметь методы конструктора (т. Е. Sub New), чтобы свойства устанавливались во время вызова десериализации.