XML 数组序列化为不同类型,没有 "parent" 数组标识符

XML Array Serialize with different types without the "parent" array identifier

我尝试将 xml 序列化(读取)到我的项目中。我无法更改 xml,因为它不是我创建的。我会尽量简化它。

我想读取一个包含多种类型的数组。只要项目在 [XmlArray("")] 标签内,这就没有问题。 其中一种类型可以包含更多相同类型的数组

例如:

Xml

<node Name="testbase">
    <items>
        <node Name="test1"/>
            <items>
                <node Name="test2"/>
                <node Name="test3"/>
            </items>
        <othernode Name="test4"/>   
    </items>
</node>

C#

public class Base
{
    [XmlAttribute("Name")]
    public string Name { get; set; }
}

public class Node : Base
{
    [XmlArray("items")]
    [XmlArrayItem("node", typeof(Node))]
    [XmlArrayItem("othernode", typeof(Othernode))]
    public Base[] nodes { get; set; }
}

public class Othernode : Base
{
}

不幸的是我有这样的事情:

<node Name="testbase">
    <node Name="test1">
        <node Name="test2"/>
        <node Name="test3"/>    
    </node>
    <othernode Name="test4"/>   
</node>

数组元素为"missing"。通常我只是将 [XmlElemtn("")] 标签用于类似的东西。

[XmlElement("node")]
public List<Node> Nodes { get; set; }

但是不能再对不同的类型使用 XmlArrayItem 标签。解决方法是像这样使用多个 lists/arrays:

public class Vendor : CreateBase
{
    [XmlElement("node")]
    public List<Node> Nodes { get; set; }

    [XmlElement("othernode")]
    public List<Othernode> Othernodes { get; set; }
}

但我很想把所有东西都集于一身 list/array。如果您使用这种 xml 序列化,这有可能吗? 有没有办法使用模板?

亲切的问候

如果其他人找到此话题并尝试做同样的事情: 有一种方法可以通过抽象 类、[XmlInclude(typeof())][XmlElement("")] 但它向 xml 元素本身添加一个新属性。例如像这样 p3:type="XmlDerivedClass".
如果您想序列化具有不同类型的 xml 数组而不使用 [XmlArrayItem("node", typeof(Node))] (将额外的数组元素添加到xml) 您可以通过 XmlIncludes 执行此操作。

就像评论中提到的那样,看起来没有别的办法,这就是它的工作原理。由于我无法以任何方式更改 xml 的要求,我将通过 XmlDocument 或 XmlReader 手动完成。