只是一个人为的例子,但我有一些类,我想控制序列化的名称。
[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
,就像它必须应用于类一样。我想我错了。
答案 0 :(得分:2)
从文档中可以看出XmlRootAttribute
仅在该元素为根时使用(这就是为什么它适用于您的“item”):
将属性目标的XML序列化控制为XML根元素
- MSDN
在我看来,或许你想要XmlTypeAttribute
非根本的东西。