2 Stimmen

Serialisieren einer ObservableCollection(of T) in VB.Net

Ich probiere MVVM in VB.Net seit einiger Zeit aus und habe mit einigen meiner Entitäten angefangen, List (of T) s zu verwenden, die ich in XML auf die Festplatte serialisiert habe. Jetzt habe ich die Klassen, die von den Listen verwendet werden, aktualisiert, um INotifyPropertyChanged zu implementieren, also habe ich auch die List (of T) s in ObservableCollection (of T) s geändert.

Danach hat der XML-Serializer aufgehört zu funktionieren :'( Ein Kollege sagte mir, dass ObservableCollections im Gegensatz zu generischen Listen nicht serialisierbar sind.

Wenn das der Fall ist, wie kann ich sie serialisierbar machen? Vielen Dank im Voraus~! :D

2voto

JaredPar Punkte 699699

Ihr College hat recht. ObservableCollection(Of T) ist tatsächlich serialisierbar, aber nur durch den Binär-Serializer und nicht durch den XML-Serializer.

Um dies zu umgehen, können Sie die Serialisierung von Sammlungen von ObservableCollection(Of T) einfach mit List(Of T) umwickeln. Führen Sie die Konvertierung einfach beim Zeitpunkt der Serialisierung durch.

Zum Beispiel ...

Public Sub Serialize(ByVal col as ObservableCollection(Of Integer))
  Dim list = New List(Of Integer)(col)
  ReallySerialize(list)
End Sub

Public Function Unserialize() As ObserableCollection(Of Integer)
  Dim list = ReallyUnserialize()
  return New ObservableCollection(Of Integer)(list)
End Function

2voto

joedotnot Punkte 4564

@JaredPar's Antwort re nur der Binary-Serializer funktioniert, nicht der Xml-Serializer, der XmlSerializer funktioniert für mich (in VS2010).

//ObservableCollection customers = Code zum Laden von Kunden

//in Datei schreiben
   XmlSerializer xs = new XmlSerializer(typeof(ObservableCollection));
   using (StreamWriter wr = new StreamWriter("myfile.xml")) {
        xs.Serialize(wr, customers);
   }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X