2011-12-29 95 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; 
}