2011-12-29 94 views
3

我對使用泛型的成員的XML序列化遇到問題。以下是我基本的階級結構是什麼樣子(我要使用默認的XML序列化,而不是在每一個類重載IXmlSerializable的):使用泛型的抽象類的成員的XML序列化

public class MyClassToSerialize 
{ 
    public Problem<int> Problem; 
} 

public class MyOtherClassToSerialize 
{ 
    public Problem<string> Problem; 
} 

public abstract class Problem<T> 
{ 
} 

public class ProblemImplementationOne<T> : Problem<T> 
{ 
} 

public class ProblemImplementationTwo<T> : Problem<T> 
{ 
} 

現在,這裏是我的嘗試:

[XmlInclude(typeof(ProblemImplementationOne<T>))] 
[XmlInclude(typeof(ProblemImplementationTwo<T>))] 
public abstract class Problem<T> 
{ 
} 

這不起作用:它在屬性中使用的<T>參數上出現編譯錯誤。下面的(顯然)不工作爲好,因爲它不序列化提供足夠的信息:

[XmlInclude(typeof(ProblemImplementationOne<>))] 
[XmlInclude(typeof(ProblemImplementationTwo<>))] 
public abstract class Problem<T> 
{ 
} 

這在序列化提供了錯誤:「泛型類型定義不能系列化只能使用特定的通用類型可以使用。「

有沒有人知道這個問題的簡單解決方案?

回答

3

這樣的事情,這取決於實際的運行時類型在你序列化對象Problem屬性:

[XmlInclude(typeof(ProblemImplementationOne<int>))] 
[XmlInclude(typeof(ProblemImplementationTwo<int>))] 
public class MyClassToSerialize 
{ 
    public Problem<int> Problem; 
} 

[XmlInclude(typeof(ProblemImplementationOne<string>))] 
[XmlInclude(typeof(ProblemImplementationTwo<string>))] 
public class MyOtherClassToSerialize 
{ 
    public Problem<string> Problem; 
}