2011-05-30 48 views
6

我有類B繼承的類A。我有一個包含AB項目B類的列表:XML序列化一個基類的列表

List<B> myList = new List<B>(); 
myList.Add(new A()); 

當我試圖序列使用XmlSerializable這個名單,則拋出異常。如果我將列表定義爲B類型,那麼我不會得到這個異常。序列化派生類的最佳方式是什麼?

回答

7

XmlIncludeAttribute將做的伎倆。
如果你去這個URL,你也會在那裏找到一個代碼示例。

此外,在該示例中該屬性應用於該方法,但您可能希望在您的情況下將其應用於類A。

+0

再次感謝您爲我節省了一大筆頭痛。我一直被困在序列化的一些奇怪的方面:) 一個相關的說明 - 因爲可序列化通過調用get每個公共成員 - 是否有某種有條件的get?我問,因爲我也用它來綁定,所以我的get/set改變了屬性,因此它第二次「設置」(從反序列化)它不是最初預期會進入集合 – Steve 2011-05-30 04:58:49

+0

我將其稱爲「條件訪問器'(這是可能的嗎?) – Steve 2011-05-30 05:02:02

+0

不知道我明白了這個問題。在序列化時,它會在所有公共屬性(字段)上運行'get'。在反序列化中,它通過默認構造函數創建一個對象,然後在每個屬性上調用'set'。 – 2011-05-30 05:04:29