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.
精彩评论