Сериализация ObservableCollection (of T) в VB.Net - PullRequest
2 голосов
/ 09 октября 2009

Я некоторое время пробую MVVM в VB.Net и начал с некоторых из моих сущностей, используя List (of T) s, который я xml сериализовал на диск. Теперь я обновил классы, используемые списками для реализации INotifyPropertyChanged, поэтому я также изменил список (из T) на ObservableCollection (из T).

После этого сериализатор XML перестал работать: '(Коллега сказал мне, что ObservableCollections, в отличие от общих списков, не сериализуемы.

Если так, то как я могу сделать их сериализуемыми? Заранее спасибо ~! : D

Ответы [ 2 ]

2 голосов
/ 26 ноября 2010

@ Ответ 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);
   }
2 голосов
/ 09 октября 2009

Ваш колледж наполовину правильный.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
...