2012-08-09 36 views
1

我試圖序列化一些對象,其中包含帶有子元素的IListIList是非泛型的,我不能只是通用的。 我得到異常像「The Type MyObjectChild was not expected。...」,它說了一些關於XMLInclude,但我不認爲這就是我正在尋找。 有沒有人有任何想法如何使XMLSerialzer序列化子元素? 這兩個元素是[Serializable]如何使用XMLSerializer將對象與非對象分開使用

XmlSerializer xmlSerializer = new XmlSerializer(typeof ObservableCollection<MyEntryViewItem>)); 
FileStream fileStream = new FileStream(exportPath, FileMode.Create); 

xmlSerializer.Serialize(fileStream, _listEntries); 

public IList ElementChildren { get { return _item.Children; } set { _item.Children = value; RaisePropertyChanged(() => ElementChildren); } } 

[Serializable] 
public sealed class ElementChild 
{ 
    private int _id; 
    private string _text; 
    private string _path; 
    ... 
} 
+0

您正試圖序列化MyEntryViewItem的集合,這個類是什麼?此外,錯誤是指您還沒有將其放入上下文MyObjectChild的另一個Clas。我想更多的信息會幫助很多! – 2012-08-09 07:38:46

+0

這只是一個基本的類與一些屬性(主要是字符串),我想序列化。但其中一個屬性是一個元素類型爲ElementChild的IList ... – JonSchn 2012-08-09 07:42:17

+0

MyObjectChild與ElementChild相同...我混合了名稱... – JonSchn 2012-08-09 07:42:42

回答

0

XmlSerializer的治療IList的特殊方式(實際上的ICollection和IEnumerable,但是IList的是兩者)。有一份關於XmlSerializer MSDN頁:

XmlSerializer的給予特別的待遇, 實現IEnumerable或ICollection的類。一個實現了 IEnumerable的類必須實現一個公共的Add方法,該方法只需要一個參數 。 Add方法的參數必須與從 GetEnumerator返回的值的當前屬性返回的 或該類型的其中一個基類相同。實現 ICollection(如CollectionBase)的類除了IEnumerable必須具有 之外,還必須具有公用項目索引屬性(C#中的索引器),該整數採用 整數,且必須具有integer類型的公用Count屬性。 Add方法的參數 必須與從Item屬性 返回的類型相同,或者是該類型的基礎類型之一。對於實現ICollection的類 ,要被序列化的值將從索引的Item屬性中檢索 ,而不是通過調用GetEnumerator。