对于使用泛型的成员,我遇到了XML序列化问题。以下是我的基本类结构(我希望使用默认的XML序列化,而不是在每个类中重载IXmlSerializable):
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>
{
}
这给出了序列化时的错误:“通用类型定义不能用于序列化。只能使用特定的泛型类型。”
有没有人知道这个问题的简单解决方案?
答案 0 :(得分: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;
}