将多个类型的列表序列化为 XML,没有根元素名称

Mar*_*duk 2 c# xml serialization

我正在尝试在下面序列化我的对象,但没有列表的根名称我无法序列化它。Hub、Switch 和 Device 是从 AbstractNode 派生的类型。

[XmlRoot(ElementName = "Roothub")]
public class RootHub
{
    [XmlArrayItem(typeof(Hub), ElementName = "Hub20")]
    [XmlArrayItem(typeof(Switch), ElementName = "Switch")]
    [XmlArrayItem(typeof(Device), ElementName = "Device")]
    public List<AbstractNode> DevicesList { get; set; }
}

[XmlInclude(typeof(Hub))]
[XmlInclude(typeof(Device))]
[XmlInclude(typeof(Switch))]

public abstract class AbstractNode
{
    [XmlAttribute]
    public string Tag { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

输出:

<RootHub>
   <DevicesList>
      <Hub20 Tag="HUB1" VidPid="VID_0000&amp;PID_0000"/>
      <Switch Tag="SWITCH1" />
      <Device Tag="MOUSE" VidPid="VID_0000&amp;PID_0000"/>
   </DevicesList>
</RootHub>
Run Code Online (Sandbox Code Playgroud)

但我需要的是这个:

<RootHub>
   <Hub20 Tag="HUB1" VidPid="VID_0000&amp;PID_0000"/>
   <Switch Tag="SWITCH1" />
   <Device Tag="MOUSE" VidPid="VID_0000&amp;PID_0000"/>
</RootHub>
Run Code Online (Sandbox Code Playgroud)

我已经尝试过这个问题的解决方案在 C# XML 序列化中删除数组名称,但它不起作用,因为不可能将 XmlArrayItem 与 XmlElement 属性混合。有没有其他方法可以做到这一点?

Tho*_*que 6

使用XmlElement属性而不是XmlArrayItem,它会给你你想要的输出。

[XmlElement(typeof(Hub), ElementName = "Hub20")]
[XmlElement(typeof(Switch), ElementName = "Switch")]
[XmlElement(typeof(Device), ElementName = "Device")]
public List<AbstractNode> DevicesList { get; set; }
Run Code Online (Sandbox Code Playgroud)