私はList(Of Player)
の作成に使用するクラスPlayer
を持っています。アプリケーションが終了したら保存する必要があります。 Windowsフォームではシリアル化するだけですが、UWPではこれ以上使用できないため、数十時間Googleに接続してからMicrosoft.Toolkit.Uwp
、次にNewtonsoft.Json
を見つけましたが、私は悲惨にそれらを使用しません。あなたの助けが必要です!VB.NETでList(Object of)をシリアライズするには?
のは、私は小さなクラスがあるとしましょう:
Dim Name As String
Dim Score As Double
Public Class Player
<JsonConstructor()>
Public Sub New(Name As String, Score As Double) ' New with score
Me.Name = Name
Me.Score = Math.Max(1, Score)
End Sub
End Class
Public Overrides Function ToString() As String ' ToString
Return $"{Name} [{Score}]"
End Function
どのように私は正常List(Of Player)
を読み書きできますか?
' Loading MainPage.xaml
Private Sub MainPage_Loading() Handles Me.Loading
ReadAsync()
MainFrame.Margin = New Thickness(0)
Window.Current.Content = MainFrame
MainFrame.Navigate(GetType(PlayerList), Players)
End Sub
' Read
Private Async Sub ReadAsync()
Players = JsonConvert.DeserializeObject(Of List(Of Player))(Await FileIO.ReadTextAsync((Await StorageFolder.CreateFileAsync("players.json", CreationCollisionOption.OpenIfExists))))
If Players Is Nothing Then
Players = New List(Of Player)
WriteAsync()
End If
End Sub
' Write
Public Shared Async Sub WriteAsync()
Await FileIO.WriteTextAsync(Await StorageFolder.CreateFileAsync("players.json", CreationCollisionOption.ReplaceExisting), JsonConvert.SerializeObject(Players, Formatting.Indented))
End Sub
' Loading PlayerList.xaml
Protected Overrides Sub OnNavigatedTo(e As NavigationEventArgs)
ListBoxPlayers.Items.Clear()
Players = e.Parameter
For Each Player In Players
ListBoxPlayers.Items.Add(Player)
Next
End Sub
' Adding a new player in the interface
Private Sub ButtonAddPlayer_Click(sender As Button, e As RoutedEventArgs) Handles ButtonAddPlayer.Click
' ...
' Commit
MainPage.Players.Add(New Player(TextBoxName.Text))
ListBoxPlayers.Items.Add(MainPage.Players(MainPage.Players.Count - 1))
MainPage.WriteAsync()
End Sub
これはすべて混乱しています。プレーヤーのトラフを追加すると、通常のようにListBoxに入ります。しかし、アプリケーションを閉じてもう一度開くと、空のオブジェクトが一杯になります。
私は私の問題についての詳細を知るためにいくつかの怒りのテストをした、私は全くシリアライズないんだけど、私はおそらく正しくデシリアライズしてい判明。
newtonsoft.json.netを使用してjsonにオブジェクトを直列化および逆シリアル化したり、その逆にしてみましたか? – Pratyay
@Pratyayはい、私はやってみました。しかし、私は空のオブジェクトの数が正しくありません。 – NatoBoram
投稿したコードは正しいです。私はあなたのコードでテストしましたが、うまくいきます。ただし、投稿したコードはまだ完成していません。まだ問題がある場合は、問題を再現できる[mcve]を共有してください。 –