2009-10-09 3 views
2

나는 VB.Net에서 잠시 MVVM을 사용하려고 노력 중이며 List (T 중)를 사용하여 일부 엔티티를 시작했다. . 이제 목록에 사용되는 클래스를 업데이트하여 INotifyPropertyChanged를 구현하므로 List (T)의 목록을 ObservableCollection (T)으로 변경했습니다.VB.Net에서 ObservableCollection (T)의 serialize

된 후, XML 시리얼 라이저 작동이 중지 :.? "(A 동료 ObservableCollections가 일반 목록과는 달리, 직렬화 할 수없는 것을 나에게 말했다

후 어떻게 그들을 직렬화 할 수 있도록 사전에 감사합니다 ~! : D

답변

2

귀하의 대학 ObservableCollection(Of T) 참으로 직렬화. 반 정확하지만 바이너리 시리얼이 아닌 XML 한.를 통해 그렇다

당신은 ObservableCollection(Of T)의 컬렉션의 직렬화를 래핑이 문제를 해결하기 위해 할 수있는 일 List(Of T)와 함께 있습니다. 직렬화 시점에서 변환. 예를 들어

... 이진 직렬 재 JaredPar의 대답에서 XML을하지 작동 @

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 
+0

나는 ~! T_T; 고마워 ~! – GaiusSensei

+4

ObservableCollection 은 CollectionChanged 이벤트가 [NonSerializedAttribute]로 표시되었으므로 .NET 4.0의 XmlSerializer를 통해 직렬화됩니다. 따라서 .NET 4.0을 사용한다면 괜찮습니다. –

2

, 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); 
    }