在VB.Net中序列化ObservableCollection(of T)

时间:2009-10-09 16:22:44

标签: vb.net serialization observablecollection

我正在VB.Net中尝试MVVM一段时间,并开始使用我的一些实体使用List(of T),我将xml序列化到磁盘。现在,我更新了列表使用的类来实现INotifyPropertyChanged,所以我也将List(of T)更改为ObservableCollection(of T)s。

之后,XML序列化程序停止工作:'(一位同事告诉我,与通用列表不同,ObservableCollections不可序列化。

如果是,那我该如何让它们Serializable?在此先感谢〜! :d

2 个答案:

答案 0 :(得分:2)

你的大学是正确的一半。 ObservableCollection(Of T)确实是可序列化的,但它是通过二进制序列化器而不是XML序列化器。

您可以采取哪些措施来解决ObservableCollection(Of T)List(Of T)的任何集合的序列化问题。只需在序列化时进行转换。

例如......

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

答案 1 :(得分: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);
   }