Десериализовать в класс - PullRequest
0 голосов
/ 05 октября 2018

У меня есть класс Person, который я могу сериализовать с помощью следующего кода, но я не могу понять, как десериализовать файл обратно в класс.Буду признателен за помощь в этом.Спасибо.

Imports Newtonsoft.Json
Imports Windows.Storage
Imports Windows.Storage.Streams

Public Class Person
   Public Property Name As String
   Public Property Age As Integer
   Public Property Gender As String
End Class

Public NotInheritable Class MainPage
Inherits Page
Private p As Person
Private pList As New List(Of Person)

Private Async Sub Save()
    Dim jsonContents As String = JsonConvert.SerializeObject(pList)
    Dim localFolder As StorageFolder = ApplicationData.Current.LocalFolder
    Dim textFile As StorageFile = Await localFolder.CreateFileAsync("a.txt", CreationCollisionOption.ReplaceExisting)
    Using textStream As IRandomAccessStream = Await textFile.OpenAsync(FileAccessMode.ReadWrite)

        Using textWriter As New DataWriter(textStream)
            textWriter.WriteString(jsonContents)
            Await textWriter.StoreAsync()
        End Using
    End Using
End Sub
End Class

Я попробовал следующее, но это не работает.

    Private Async Sub GetData()
    Dim localFolder As StorageFolder = ApplicationData.Current.LocalFolder
    Dim textFile = Await localFolder.GetFileAsync("a.txt")
    Dim readFile = Await FileIO.ReadTextAsync(textFile)

    Dim obj As RootObject = JsonConvert.DeserializeObject(Of RootObject)(readFile) 
   End Sub
   Public Class RootObject
          'Public Property pList1() As List(Of Person)
      Public Property Name() As String
      Public Property Age() As Integer
      Public Property Gender() As String
   End Class

1 Ответ

0 голосов
/ 08 октября 2018

Вы должны убедиться, что свойство вашего объекта класса VB соответствует ключу JSON или имени JSON .

Например, используя пример данных JSON в своем комментарии:

Поскольку ваши данные JSON не полны, я изменяю их следующим образом:

{"pList1":[{"Name":"Henrik","Age":54,"Gender":"Mand"},{"Name":"Lone","Age":50,"Gender":"Kvinde"},{"Name":"Niels","Age":24,"Gender":"Mand"},{"Name":"Pernille","Age":26,"Gender":"Kvinde"}]}

Вы можете сохранить вышеуказанные данные Json в файле с именем my.txt , если вы хотите десериализовать данные Json в объект VB, ваши классы объектов VB должны иметь следующие два класса:

Public Class Person
    Public Property Name As String
    Public Property Age As Integer
    Public Property Gender As String
End Class

Public Class RootObject
    Public Property pList1() As List(Of Person)
End Class

Обратите внимание: свойство pList1 RootObjectкласс соответствует ключу или имени pList1 в данных JSON.

Тогда вы сможете использовать класс JsonConvert для десериализации в RootObject.

Private Async Sub GetData()
    Dim localFolder As StorageFolder = ApplicationData.Current.LocalFolder
    Dim textFile = Await localFolder.GetFileAsync("my.txt")
    Dim readFile = Await FileIO.ReadTextAsync(textFile)
    Dim obj As RootObject = JsonConvert.DeserializeObject(Of RootObject)(readFile)
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...