2009-10-09 8 views
2

J'essaie MVVM dans VB.Net depuis un moment maintenant et j'ai commencé avec certaines de mes entités en utilisant List (of T) s, que je xml sérialisé sur le disque . Maintenant, j'ai mis à jour les classes utilisées par les listes pour implémenter INotifyPropertyChanged, donc j'ai aussi changé les List (de T) en ObservableCollection (of T) s.Sérialisation d'une ObservableCollection (de T) dans VB.Net

Après quoi, le sérialiseur XML a cessé de fonctionner.? (Un collègue m'a dit que ObservableCollections, à la différence des listes génériques, ne sont pas sérialisable

Si oui, alors comment puis-je les faire Serializable Merci à l'avance ~: D

Répondre

2

Votre collège est à moitié correcte. ObservableCollection(Of T) est en effet sérialisable, mais il est si à travers le sérialiseur binaire, pas le XML un.

Qu'est-ce que vous pouvez faire pour contourner ce pour envelopper la sérialisation de toutes les collections de ObservableCollection(Of T) avec List(Of T). nversion au point de sérialisation.

Par exemple ...

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 
+0

J'aurais dû y penser ~! T_T; Merci ~! – GaiusSensei

+4

ObservableCollection est sérialisable via XmlSerializer dans .NET 4.0, car l'événement CollectionChanged a été marqué avec [NonSerializedAttribute]. Donc, si vous utilisez .NET 4.0, ça devrait aller. –

2

@ réponse de JaredPar re seulement sérialiseur binaire fonctionne pas Xml un, le XmlSerializer fonctionne pour moi (en VS2010).

//ObservableCollection<Customer> customers = Code to load customers 

//write to file 
    XmlSerializer xs = new XmlSerializer(typeof(ObservableCollection<Customer>)); 
    using (StreamWriter wr = new StreamWriter("myfile.xml")) { 
     xs.Serialize(wr, customers); 
    } 
Questions connexes