2

私はしばらくの間、VB.Net で MVVM を試しており、List(of T) を使用していくつかのエンティティから始めました。これを xml でディスクにシリアル化しました。ここで、List で使用されるクラスを更新して INotifyPropertyChanged を実装したので、List(of T) を ObservableCollection(of T) に変更しました。

その後、XML シリアライザーは動作を停止しました :'( 同僚から、一般的なリストとは異なり、ObservableCollection はシリアライズ可能ではないと言われました。

もしそうなら、どうすればシリアライズ可能にできますか? よろしくお願いします〜!:D

4

2 に答える 2

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 に答える
2

あなたの大学は半分正しいです。 ObservableCollection(Of T)確かにシリアライズ可能ですが、XML シリアライザーではなく、バイナリ シリアライザーを介してシリアライズ可能です。

これを回避して、ObservableCollection(Of T)withのコレクションのシリアル化をラップするためにできること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 に答える