开发者

Serialize a generic collection specifying element names for items in the collection

I have a simple class derived from a generic list of string as follows:

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

}

when I serialize this,开发者_运维技巧 I get the following XML:

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

Is there any way to override the xml element name which is used for serializing items in the collection? I would like the following xml to be produced:

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


You don't specify this at the class level, you specify it at the property level and use the XmlArrayItemAttribute:

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

Also note that [Serializable] has no effect on XML serialization, it is used for binary or DataContract serialization.


The answer given did not always work for me as I needed to inherit directly from List. I posted a similar question and got directed to this answer Change XmlElement name for XML serialisation which allows you to do that.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜