序列化一个通用集合,指定集合中项目的元素名称

时间:2010-05-13 11:17:10

标签: .net serialization xml-serialization

我有一个从字符串的通用列表派生的简单类,如下所示:

[Serializable]
[System.Xml.Serialization.XmlRoot("TestItems")]
public class TemplateRoleCollection : List<string>
{

}

当我序列化时,我得到以下XML:

<TestItems>
  <string>cat</string>
  <string>dog</string>
  <string>wolf</string>
</TestItems>

有没有办法覆盖用于序列化集合中项目的xml元素名称? 我想生成以下xml:

<TestItems>
  <TestItem>cat</TestItem>
  <TestItem>dog</TestItem>
  <TestItem>wolf</TestItem>
</TestItems>

2 个答案:

答案 0 :(得分:3)

您没有在班级指定此项,您在属性级别指定它并使用XmlArrayItemAttribute

public class ContainerClass
{
    [XmlArray("TestItems")]
    [XmlArrayItem("TestItem")]
    public List<string> TemplateRoles { get; set; }
}

另请注意,[Serializable]对XML序列化没有影响,它用于二进制或DataContract序列化。

答案 1 :(得分:0)

给出的答案对我来说并不总是有用,因为我需要直接从List继承。我发布了一个类似的问题,并被引导到这个答案Change XmlElement name for XML serialisation,它允许你这样做。