IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Sérialisation XML d'une ArrayList


Sujet :

C#

  1. #1
    Membre averti Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Points : 342
    Points
    342
    Par défaut Sérialisation XML d'une ArrayList
    Bonjour à tous,

    Je viens de me lancer dans la sérialisation XML et je bloque déjà sur un problème qui paraît pourtant simple :

    J'ai une classe UTILISATEUR qui implémente l'interface ISerializable. J'arrive très bien et très simplement à sérialiser en XML un objet UTILISATEUR, par contre, lorsque je crée un ArrayList contenant des UTILISATEUR et que j'esaye de le sérialiser (de la même manière que précédemment avec le classe UTILISATEUR), j'ai l'erreur suivante :

    Le type GestionFichier.UTILISATEUR n'est pas attendu, utilisez l'attribut XMLInclude...

    (GestionFichier étant le namespace de mon logiciel).

    J'ai donc fait des recherches sur cet attribut et j'ai essayé de l'utiliser mais pas moyen de sérialiser l'ArrayList, je tombe toujours sur la même erreur.

    Pour info, j'utiliser StreamWriter et XMLSerializer pour sérialiser dans un fichier.

    Ai-je oublié quelque chose d'essentiel ?

    Je posterai le code source dès ce soir, mais si quelqu'un voit déjà une étape que j'aurai oublié, ça pourrait m'aider.

    L'erreur se déclenche à l'appel de la méthode XMLSerializer.Serialize(monWriter, maListe)

    --> monWriter étant StreamWriter et maListe étant un ArrayList d'objets UTILISATEUR

    Merci beaucoup.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 109
    Points : 120
    Points
    120
    Par défaut
    Il faut que tu utilises les XmlArrayAttribute

    Tu dois préciser le type des éléments contenus dans ton ArrayList, par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    [XmlArray(ElementName = "ListeObjetA")]
    [XmlArrayItem("ObjetA",Type = typeof(ObjetA))]
    public ArrayList List
    {
     get {return _list;}
     set {_list = value;}
    }

  3. #3
    Membre averti Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Points : 342
    Points
    342
    Par défaut
    Suis-je obligé de passer par une classe List ? Ne puis-je pas utilisé l'objet ArrayList par défaut ?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 109
    Points : 120
    Points
    120
    Par défaut
    Dans mon exemple c'est une ArrayList, bon elle s'appelle List mais c'est bien une ArrayList ...

  5. #5
    Membre confirmé Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Points : 513
    Points
    513
    Par défaut
    Si je peux me permettre seulement de rajouter un truc... Oublie les ArrayList et sers-toi des collections génériques !

  6. #6
    Membre averti Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Points : 342
    Points
    342
    Par défaut
    Euh oui c'est gentil de me dire d'utiliser des Collections génériques mais ça serait encore plus gentil de m'expliquer pourquoi...

    Sinon pour l'histoire des ArrayList j'ai fais comme tu dis, ça marche pas :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            [XmlArray(ElementName = "ListeObjetA")]
            [XmlArrayItem("UTILISATEUR", Type = typeof(GestionFichiers.JobClasses.UTILISATEUR))]
            public ArrayList List
            {
                get { return _list; }
                set { _list = value; }
            }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                XmlSerializer mySerializer = new XmlSerializer(typeof(ArrayList));
                this.List = utilisateurListe;
                StreamWriter myReader = new StreamWriter(userPath + "\\" + "Utilisateurs.xml");
     
                mySerializer.Serialize(myReader, utilisateurListe);

    "Le type GestionFichiers.JobClasses.UTILISATEUR n'était pas attendu. Utilisez l'attribut XmlInclude ou SoapInclude pour spécifier les types qui ne sont pas connus statiquement."

  7. #7
    Membre averti Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Points : 342
    Points
    342
    Par défaut
    Je reviens sur mon problème car je viens de trouver une solution : L'utilisation de List<> à la place d'ArrayList :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public void SerializeUtilisateurList(List<UTILISATEUR> utilisateurListe, string userPath)
    {
        XmlSerializer mySerializer = new XmlSerializer(typeof(List<UTILISATEUR>));
     
        StreamWriter myReader = new StreamWriter(userPath + "\\" + "Utilisateurs.xml");
     
        mySerializer.Serialize(myReader, utilisateurListe);
    }
    et même pas besoin de rajouter des attributs XML du moment où la classe contenue dans la liste (ici UTILISATEUR) est sérialisable (c'est à dire implémente l'interface ISerializable).
    Voici le résultat xml obtenu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?xml version="1.0" encoding="utf-8"?>
    <ArrayOfUTILISATEUR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <UTILISATEUR>
        <IdUtilisateur>18</IdUtilisateur>
        <Nom>Toto le nom</Nom>
        <Prenom>Toto le prénom</Prenom>
        <UtilisateurPrincipal>true</UtilisateurPrincipal>
        <IsAdministrateur>true</IsAdministrateur>
        <CreeLe>2008-11-29T09:56:56.1875+01:00</CreeLe>
      </UTILISATEUR>
      <UTILISATEUR>
        <IdUtilisateur>24</IdUtilisateur>
        <Nom>Titi le nom</Nom>
        <Prenom>Titi le prénom</Prenom>
        <UtilisateurPrincipal>false</UtilisateurPrincipal>
        <IsAdministrateur>false</IsAdministrateur>
        <CreeLe>2008-12-14T09:56:56.1875+01:00</CreeLe>
      </UTILISATEUR>
    </ArrayOfUTILISATEUR>
    Merci à tous pour vos réponses (--> Tag résolu).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JAXB] Desérializer du xml vers une liste ou arraylist
    Par jamelledine_med dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 31/05/2009, 20h17
  2. sérialisation XML en java Avec des Matrice ArrayList
    Par bilred dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 16/04/2009, 15h55
  3. Réponses: 10
    Dernier message: 03/03/2009, 00h19
  4. Sérialisation XML d'une famille de classes
    Par darkfrag dans le forum C#
    Réponses: 3
    Dernier message: 09/06/2008, 16h21
  5. Problème de sérialisation XML d'une Array
    Par Abakai dans le forum C#
    Réponses: 3
    Dernier message: 21/05/2007, 15h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo