c# - XML 序列化 : The type of the argument object 'Sw' is not primitive

标签 c# xml-serialization primitive derived-class

我正在尝试将对象序列化为 XML 文件,但出现上述错误。

问题似乎与包含基类列表但由从基类派生的对象填充的对象有关。

示例代码如下:

public class myObject
{
    public myObject()
    {
        this.list.Add(new Sw());
    }

    public List<Units> list = new List<Units>();
}

public class Units
{
    public Units()
    {
    }
}

public class Sw : Units
{
    public Sw();
    {
    }

    public void main()
    {
        myObject myObject = new myObject();
        XmlSerializer serializer = new XmlSerializer(typeof(myObject));
        TextWriter textWriter = new StreamWriter ("file.xml");
        serializer.Serialize (textWriter, myObject);
    }

例如仅包含 List<Units> 的对象它由继承自 Units 的派生对象填充类(Sw)。

很抱歉没有提供我的实际代码,但是所涉及的对象非常复杂,这似乎是对象中唯一无法成功序列化的部分——而且只有当列表包含派生类时。

如何正确序列化这样的类?

最佳答案

XmlInclude 属性标记 Units 类,将派生类作为参数传递:

[XmlInclude(typeof(Sw))]
public class Units
{
    public Units()
    {
    }
}

关于c# - XML 序列化 : The type of the argument object 'Sw' is not primitive,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20917831/

相关文章:

c# - 为什么这个反序列化会抛出 StackOverflow 异常?

c++ - move 语义和原始类型

javascript - JavaScript 中的原语和对象包装器等价

c# - Entity Framework 和 DataContractSerializer

c# - 删除 while ((line = r.ReadLine()) != null) 中的最后 3 行但不打开新的文本文件来删除这些行?

C#:反序列化 XML 文件错误(认为这是一个命名空间问题 - 虽然我一生都无法解决)

java - JAX-B 中的映射序列化会产生不需要的 XML 命名空间和前缀

c# - Java 比特转换器

c# - 在 if 语句中使用 ConcurrentDictionary TryGetValue 是否会使 if 内容线程安全?

c# - Form.TopMost 有时有效