2010-05-13 183 views
0

我从字符串的泛型列表派生的简单类,如下所示在指定的项目元素名称:序列化泛型集合集合

[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> 

回答

3

你不要在类级别指定此,你在属性级别指定它,并使用XmlArrayItemAttribute

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

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

+0

+1完美工作。谢谢。 – 2010-05-13 11:46:47

+0

我刚碰到这个问题。有没有办法做到这一点,仍然从列表继承?这个答案很好,但是解决方法而不是我寻找的解决方案。在我的情况下,它是一个自定义(非原始)类型的列表,它已经标记为[XmlRoot]属性,所以当序列化程序不赞同这种类型的列表时,我感到很惊讶。 – si618 2010-09-01 02:53:50

+0

@Si:'XmlRootAttribute'不会做你认为它确实做的事。它仅在您自己序列化类时控制根元素的名称(AKA文档元素)。也许你正在寻找'XmlTypeAttribute'? – Aaronaught 2010-09-01 14:33:39

0

给出的答案并不总是适用于我,因为我需要直接从List继承。我发布了一个类似的问题,并得到了这个答案Change XmlElement name for XML serialisation,它可以让你做到这一点。