2010-05-13 3 views
0

je une simple classe dérivée d'une liste générique de chaîne comme suit:sérialiser une collection générique spécifiant les noms d'éléments pour les éléments de la collection

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

} 

quand je sérialisez, je reçois le code XML suivant:

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

Existe-t-il un moyen de remplacer le nom de l'élément XML utilisé pour la sérialisation des éléments de la collection? Je voudrais être produit le code XML suivant:

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

Répondre

3

vous ne spécifiez pas au niveau de la classe, vous le spécifiez au niveau de la propriété et utilisez le XmlArrayItemAttribute:

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

Notez également que [Serializable] n'a aucun effet sur la sérialisation XML, il est utilisé pour la sérialisation binaire ou DataContract.

+0

+1 Travaillé parfaitement. Merci. –

+0

Je viens de rencontrer ce problème. Y at-il un moyen de le faire et toujours hériter d'une liste? Cette réponse fonctionne bien, mais est une solution de contournement plutôt que la solution que je cherchais. Dans mon cas c'est une liste d'un type personnalisé (non-primitif), qui est déjà marqué avec l'attribut [XmlRoot], donc j'ai été surpris quand le sérialiseur ne respectait pas cela pour une classe de List . – si618

+0

@Si: Le 'XmlRootAttribute' ne fait pas ce que vous croyez. Il contrôle uniquement le nom de l'élément racine (élément de document AKA) lorsque vous sérialisez la classe par elle-même. Peut-être cherchez-vous le 'XmlTypeAttribute'? – Aaronaught

0

La réponse donnée n'a pas toujours fonctionné pour moi car j'avais besoin d'hériter directement de List. J'ai posté une question similaire et je me suis dirigé vers cette réponse Change XmlElement name for XML serialisation qui vous permet de le faire.

Questions connexes