序列化集合项时使用类型的根名称

时间:2014-01-10 02:48:37

标签: c# xml serialization

只是一个人为的例子,但我有一些类,我想控制序列化的名称。

[XmlRoot("item")]
public class ItemWrapper
{
    [XmlArray("parts")]
    public List<PartWrapper> Parts { get; set; }
}

[XmlRoot("part")]
public class PartWrapper
{
    [XmlAttribute("name")]
    public string Name { get; set; }
}

现在,当我序列化ItemWrapper Parts时,我希望每个PartWrapper项都使用根名称("part")进行序列化,但是而是使用类型的名称(如果未指定XmlRootAttribute,它将默认使用)。

<item>
  <parts>
    <PartWrapper name="foo" />
    <PartWrapper name="bar" />
  </parts>
</item>

现在我知道要修复此问题以获得我想要的是将XmlArrayItemAttribute添加到Parts属性以指定每个项目的名称,但我觉得它是多余的。我只是想使用我指定的类型根的名称。

[XmlRoot("item")]
public class Item
{
    [XmlArray("parts")]
    [XmlArrayItem("part", Type=typeof(PartWrapper))]
    public List<PartWrapper> Parts { get; set; }
}

有没有办法告诉序列化程序我想使用收集项的根名称?如果是这样,怎么样?

为什么不只使用根名称?它不应该有什么好理由吗?

据我了解,XmlRootAttribute允许您将元素命名为XmlElementAttribute,就像它必须应用于类一样。我想我错了。

1 个答案:

答案 0 :(得分:2)

从文档中可以看出XmlRootAttribute仅在该元素为根时使用(这就是为什么它适用于您的“item”):

  

将属性目标的XML序列化控制为XML根元素

- MSDN

在我看来,或许你想要XmlTypeAttribute非根本的东西。