1

私は Windows ストア アプリに取り組んでおり、デシリアライズできた xml ファイルに DTO クラスをシリアライズする際に問題が発生しています。データをバインドして一部のデータを変更した後、DTO クラスをシリアル化して、再度シリアル化解除したときにそれらの変更が反映されるようにする方法がわかりません。私がやっていることは、アプリにログインした後Data、次のページで使用するオブジェクトも渡すことItemsListViewです。これは私がオブジェクトを渡す方法です:

Dim oData As Data
oData = Await FileHelper.DeserializeXml()
Me.Frame.Navigate(GetType(ItemsListView),oData)

私のItemsListViewページでは、オブジェクトを にバインドして、次のDataContextようにデータを表示できるようにします。

    Protected Overrides Sub LoadState(navigationParameter As Object, pageState As Dictionary(Of String, Object))

      Dim oData As Data = navigationParameter

      pageTitle.DataContext = oData.Field

      Me.DefaultViewModel("Items") = oData.ListRoot

    End Sub

次に、アイテムをクリックしたオブジェクトを渡し、そのデータを次のページにバインドする別のページもあります。これがそのコードです。

    Private Sub ItemView_ItemClick(sender As Object, e As ItemClickEventArgs) Handles itemGridView.ItemClick

    If e.ClickedItem IsNot Nothing Then
        Me.Frame.Navigate(GetType(RecordAddEditView), e.ClickedItem)
    End If

End Sub

ページは他にもありますが、アプリが何をしているかを把握するにはこれで十分だと思います。すべてのオブジェクトを次のページに渡し、それらのページのデータを変更した後、Dataすべてのページのすべてのデータをシリアル化できるように、オブジェクトをシリアル化するにはどうすればよいでしょうか? たとえば、LoginPage で oData オブジェクトを呼び出すなど、GetDataForSerialization() メソッドでそれを行う必要がありますか? それはおそらく非常に単純なもので、数日後には理解できないようです. コードの提案は大歓迎です。

シリアライゼーションの方法は次のとおりです。

    Public Shared Async Function SerializeXml() As Task

    Dim serializer As New XmlSerializer(GetType(Data))
    Dim nameSpaces As XmlSerializerNamespaces = New XmlSerializerNamespaces()
    Dim mStream As New MemoryStream()
    Dim result As Byte()
    Dim dataToSerialize As Data = GetDataForSerialization()

    ' Creates empty namespaces
    nameSpaces.Add(String.Empty, String.Empty)

    ' Serializes the objects
    serializer.Serialize(mStream, dataToSerialize, nameSpaces)

    ' Writes bytes to stream
    result = mStream.ToArray()

End Function

Private Shared Function GetDataForSerialization() As Data

    ' What to do here to get all the data from my Data class so that I can serialize it

End Function
4

0 に答える 0