2010-09-06 2 views
4

Je suis en train de se rendre à ce résultat lors de la sérialisation XML:Se débarrasser d'un nom de tableau en C# sérialisation XML

<Root Name="blah"> 
    <SomeKey>Eldad</SomeKey> 
    <Element>1</Element> 
    <Element>2</Element> 
    <Element>3</Element> 
    <Element>4</Element> 
</root> 

Ou autrement dit - je suis en train de contenir un tableau dans la « racine "élément, à côté des touches supplémentaires.

Ceci est ma tentative grossière:

[XmlRootAttribute(ElementName="Root", IsNullable=false)] 
public class RootNode 
{ 
    [XmlAttribute("Name")] 
    public string Name { get; set; } 

    public string SomeKey { get; set; } 

    [XmlArrayItem("Element")] 
    public List<int> Elements { get; set; } 
} 

Et mon sérialisation:

string result; 
XmlSerializer serializer = new XmlSerializer(root.GetType()); 
StringBuilder sb = new StringBuilder(); 
using (StringWriter sw = new StringWriter(sb)) 
{ 
    serializer.Serialize(sw, root); 
    result = sw.ToString(); 
} 

Cependant, ceci est mon résultat (Suppression de l'espace de noms pour plus de clarté):

<Root> 
    <SomeKey>Eldad</SomeKey> 
    <Elements> 
    <Element>1</Element> 
    <Element>2</Element> 
    <Element>3</Element> 
    </Elements> 
</Root> 

Est -il un moyen de supprimer la partie "Elements"?

Répondre

8

Utilisez l'attribut XmlElement sur le tableau, cela demandera au sérialiseur de sérialiser les éléments du tableau en tant qu'éléments enfants de l'élément en cours et de ne pas créer un nouvel élément racine pour le tableau.

[XmlRootAttribute(ElementName="Root", IsNullable=false)] 
public class RootNode 
{ 
    [XmlAttribute("Name")] 
    public string Name { get; set; } 

    public string SomeKey { get; set; } 

    [XmlElement("Element")] 
    public List<int> Elements { get; set; } 
} 
+0

Merci beaucoup, qui fonctionne :-) –

+0

you rock !, merci. –

+0

Avec un dictionnaire, cela ne fonctionne pas car nous devons parcourir les éléments manuellement. :( –

-1

Merci à Chris Taylor pour la réponse à mon problème aussi. L'utilisation d'un service Web ASMX, je devenais le code XML suivant:

<Manufacturers> 
    <Manufacturer> 
     <string>Bosch</string> 
     <string>Siemens</string> 
    </Manufacturer> 
</Manufacturers> 

Je voulais obtenir les noms du fabricant directement dans le l'élément, se débarrasser de l'élément comme celui-ci:

<Manufacturers> 
    <Manufacturer>Bosch</Manufacturer> 
    <Manufacturer>Siemens</Manufacturer> 
</Manufacturers> 

Pour toute personne d'autre avec le même problème, mon code pour y parvenir (en VB.Net) est:

<WebMethod()> _ 
Public Function GetManufacturers() As Manufacturers 
    Dim result As New Manufacturers 
    result.Manufacturer.Add("Bosch") 
    result.Manufacturer.Add("Siemens") 
    Return result 
End Function 

<XmlRoot(ElementName:="Manufacturers")> _ 
Public Class Manufacturers 
    <XmlElement("Manufacturer")> _ 
    Public Manufacturer As New List(Of String) 
End Class 
Questions connexes