我正在VB.Net中尝试MVVM一段时间,并开始使用我的一些实体使用List(of T),我将xml序列化到磁盘。现在,我更新了列表使用的类来实现INotifyPropertyChanged,所以我也将List(of T)更改为ObservableCollection(of T)s。
之后,XML序列化程序停止工作:'(一位同事告诉我,与通用列表不同,ObservableCollections不可序列化。
如果是,那我该如何让它们Serializable?在此先感谢〜! :d
答案 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);
}