2013-05-21 66 views
0

這可能聽起來像來自其他主題的重複問題,但它在接口定義中推遲。序列化具有另一個接口列表定義的接口實例

我有一個接口,可以說叫IClass1,在其定義中包含的接口列表,說IClass2

我有一個業務單位來實現這個接口;實施自然會是這樣

class Class1: IClass1 
{ 
    ....whatever properties 
    List<IClass2> DataItems { get; set; } 
} 

class Class2:IClass2 
{ 
    ...whatever properties 
} 

的問題是,XmlSerializer會抱怨在Class1的列表中,因爲它是一個接口! 所以我的問題是:簡單地說,我總是知道在DataItems列表中應該反序列化的實例的類型是什麼,它將是Class2類型,如何告訴我的XML序列化程序?

我已經看到了很多解決方法,使用虛擬屬性並在序列化/反序列化過程中忽略接口列表是最合適的一個,我認爲,而且我當然不想發明我的自己的序列化程序或重新實現序列化我的類

回答

1

如果您使用的是DataContracts,則可以使用KnownTypeAttribute爲反序列化器提供反序列化時應使用的一個或多個類型的列表。

version that takes a string parameter可讓您指定將返回一系列類型的方法的名稱,在某些情況下該方法可能更易於使用。

我給出的鏈接在頁面末尾有一些示例代碼。

+0

哎唷! .net 4.5 我需要使用.net framework 4:/ – simsim

+0

@simsim沒關係,它也適用於.Net 3.0,3.5和4.0。點擊幫助頁面上的「其他版本」下拉菜單。 –

+0

是的,我想添加一個引用,System.Runtime.Serialization。 任何方式,這也不會工作,正如我在示例代碼中看到的,我的界面必須知道將繼承它的類:) 在我的情況下,接口是在一個分離的項目;實現與定義分離 – simsim