2

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

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

如果是这样,那么我怎样才能使它们可序列化?先谢谢了~!:D

4

2 回答 2

2

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

您可以做些什么来解决这个问题,以包装 with 的任何集合的序列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
于 2009-10-09T16:26:27.577 回答
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);
   }
于 2010-11-26T06:08:22.423 回答