none
[Résolu] Serialisation XML de liste : supprimer l'élément racine auto-généré RRS feed

  • Question

  • Bonjour,

    Je rencontre une subtilité de la serialisation/désérialisation en XML.

    Mon objet est le suivant

     

     

     

    [Serializable()]
    public class FlotteVehicule
        {
    
            [System.Xml.Serialization.XmlAttribute(AttributeName="gestionnaire")]
            public string Nom_gestionnaire;
    
            [System.Xml.Serialization.XmlAttribute(AttributeName="region")]
            public string Region;
    
       	public string Code_gestionnaire;
    
            [ System.Xml.Serialization.XmlArrayItem("vehicule")]
            public vehicule[] vehicules = null;
    
            public FlotteVehicule(){        }
        }
    

    Aujourd'hui quand je sérialise la classe FlotteVehicule, j'obtiens ceci :

    <?xml version="1.0" encoding="utf-8"?>
    <FlotteVehicule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Nom_gestionnaire="A" region="Aquitaine">
    <Code_gestionnaire>478</Code_gestionnaire>
    <vehicules>
    <vehicule immatriculation="1451A" annee="1995" />
    <vehicule immatriculation="3245A" annee="1996" />
    <vehicule immatriculation="7841A" annee="1993" />
    </vehicules>
    </FlotteVehicule>
    

    Je voudrais supprimer l'encadrement par "vehicules" et avoir directement la liste d'élément vehicule sous FlotteVehicule. J'imagine que je dois ajouter un élément de décoration [] mais je n'arrive pas à trouver lequel. J'ai trouvé celui pour changer le nom de "vehiculeS" en autre chose avec [System.Xml.Serialization.XmlArray("mesVehicules")] mais pas trouvé celui pour ne pas avoir d'élément racine supplémentaire.

    Pouvez-vous m'indiquer si c'est possible et quel élément peut faire ceci ? merci beaucoup

    Le résultat souhaité :

    <?xml version="1.0" encoding="utf-8"?>
    <FlotteVehicule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Nom_gestionnaire="A" region="Aquitaine">
    <Code_gestionnaire>478</Code_gestionnaire>
    <vehicule immatriculation="1451A" annee="1995" />
    <vehicule immatriculation="3245A" annee="1996" />
    <vehicule immatriculation="7841A" annee="1993" />
    </FlotteVehicule>
    

     



    • Modifié Aurélien P dimanche 25 septembre 2011 22:11
    dimanche 25 septembre 2011 20:58

Réponses

  • En fait il faut faire ceci :

    remplacer le  [ System.Xml.Serialization.XmlArrayItem("vehicule")] par [ System.Xml.Serialization.XmlElement("vehicule")]

    et le tour est joué !

    je remets le code corrigé.

    [Serializable()]
    public class FlotteVehicule
        {
    
            [System.Xml.Serialization.XmlAttribute(AttributeName="gestionnaire")]
            public string Nom_gestionnaire;
    
            [System.Xml.Serialization.XmlAttribute(AttributeName="region")]
            public string Region;
    
       	public string Code_gestionnaire;
    
            [ System.Xml.Serialization.XmlElement("vehicule")]
            public vehicule[] vehicules = null;
    
            public FlotteVehicule(){        }
        }
    


    Aurélien
    dimanche 25 septembre 2011 22:10

Toutes les réponses