2009-10-09 81 views
2

我在VB.Net中嘗試了MVVM一段時間,並開始與我的一些實體使用列表(T)s,我xml序列化到磁盤。現在,我更新了List使用的類來實現INotifyPropertyChanged,所以我也將List(of T)s更改爲ObservableCollection(of T)s。序列化VB.Net中的ObservableCollection(of T)

之後,XML序列化器停止工作:?'(一位同事告訴我,ObservableCollections,不同於一般的列表,不能序列

如果是這樣那我怎麼才能讓他們序列化在此先感謝〜! d

回答

2

你的大學是對了一半。ObservableCollection(Of T)確實是序列化的,但它是那麼通過二進制序列,而不是XML。

,你能做些什麼來解決這個包裹的ObservableCollection(Of T)任何藏品的系列化與List(Of T)。只要做co在序列化點顛倒。

例如...

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

我應該想到那個〜! T_T;謝謝〜! – GaiusSensei 2009-10-09 16:48:36

+4

ObservableCollection 可通過.NET 4.0中的XmlSerializer進行序列化,因爲CollectionChanged事件已標記爲[NonSerializedAttribute]。所以如果你使用.NET 4.0,你應該沒問題。 – 2011-01-27 23:25:29

2

@ JaredPar的答案只有重新串行二進制工作不是XML,XmlSerializer的做我的工作(在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); 
    } 
相關問題