派生类的XML序列化

mfa*_*nto 1 c# xml-serialization

我有一个元素数组,我需要使用XmlSerializer序列化.我遇到的问题是我有2个派生类,并序列化它们,因此它们有一个共同基础的元素名称,似乎不起作用.

所以,这就是XML的外观:

<Root>
    <Base> foo </Base>
</Root>
Run Code Online (Sandbox Code Playgroud)

相反,我得到了

<Root>
    <Derived1> foo </Derived1>
</Root>
Run Code Online (Sandbox Code Playgroud)

我序列化的元素数组的代码是

private object[] m_nodes;

[System.Xml.Serialization.XmlElementAttribute("Base", typeof(Derived1)]
[System.Xml.Serialization.XmlElementAttribute("Base", typeof(Derived2)]

public object[] Nodes
{
    get
    {
        return this.m_nodes;
    }
    set
    {
        this.m_nodes = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,我发现节点有一个反射错误.如果我将XmlEelementAttributes中的"Base"更改为"Derived1"和Derived2",它可以工作,但元素名称不正确.

[System.Xml.Serialization.XmlInclude(typeof(Derived1))]
public abstract class Base
{
    public Base()
    {

    }
}



[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public class Derived1: Base
{
    public Derived1()
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

任何帮助是极大的赞赏.非常感谢.

Dav*_*ing 5

XML序列化包括序列化和反序列化例程.因此,如果您确实设法执行此操作,那么序列化程序将无法确定在反序列化生成的XML结构时要使用的类型.根据我的经验,最好使用两个不同的名称或使用XmlWriter和XmlReader类使用自定义序列化器/反序列化器.