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 :

serialisation d'une liste d'objets


Sujet :

C#

  1. #1
    Membre habitué
    Avatar de Spidermeu
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Points : 151
    Points
    151
    Par défaut serialisation d'une liste d'objets
    bonjour,
    j'ai créé une liste d'objets ( List<myObject>).
    Je voudrais serialiser les objets.
    Pour cela j'ai défini la classe myObject comme étant serialisable.

    Donc avant mon public class, j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        [XmlRoot(ElementName = "myObject")]
        public class myObject
        {
    mon objet comporte plusieurs variables de type string que j'ai serialisé en utilisant Attribute...

    Le probleme, c'est que lorsque j'essai de serialiser ma liste d'objets dans un fichier xml, il assigne autant d'objets de type myObject que d'xml root , et vu que l'xml root doit etre unique dans un fichier xml, celui n'est donc pas valide. l'erreur suivante apparait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Only one top level element is allowed in an XML document
    Comment puis je le rendre valide ??


    merci d'avance

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    utilise XmlElement à la place de XmlRoot

  3. #3
    Membre habitué
    Avatar de Spidermeu
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Points : 151
    Points
    151
    Par défaut
    bonjour,
    merci pour cette réponse.
    Malheureusement :

    Attribute "XmlElement" is not valid on this declaration type. It is only valid on "property, indexer, field, param, return" declarations

    même problème avec un XmlAttribute

  4. #4
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Regarde avec l'attribut XmlType.

  5. #5
    Membre habitué
    Avatar de Spidermeu
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Points : 151
    Points
    151
    Par défaut
    même chose.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Only one top level element is allowed in an XML document
    en faites, dans le fichier xml ca me met a chaque myObject different (donc pour chaque objets serialisés):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <myObject xmlns:xsi.....</myobject>

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Ben de toutes façons t'as pas besoin de mettre un attribut particulier, par défaut le XML sera généré avec un élément <myObject>.

    Sinon à mon avis c'est bien XmlType qu'il faut utiliser... Je ne vois pas pourquoi ça marche pas, fais voir ton code de sérialisation.

  7. #7
    Membre habitué
    Avatar de Spidermeu
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Points : 151
    Points
    151
    Par défaut
    classe de serialisation :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    using System;
     
    using System.Collections.Generic;
    using System.Text;
    using System.Xml.Serialization;
    using System.IO;
     
    namespace SaisiePDA
    {
        class WriteXmlFile
        {
            private StreamWriter writer;
            private string dts;
            private DateTime dt = new DateTime();
     
            public int Open()
            {
                dts = dt.Date.ToLongDateString();
                writer = File.CreateText(@".\" + dts + ".xml");
                return 0;
            }
     
            public int Make(List<Article> list)
            {
                XmlSerializer x = new XmlSerializer(typeof(Article));
                foreach (Article element in list)
                {
                    x.Serialize(writer, element);
                }
                return 0;
            }
     
            public int Close()
            {
                writer.Close();
                return 0;
            }
        }
    }
    classe à serialiser :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Xml.Serialization;
    using System.IO;
     
    namespace SaisiePDA
    {
        [XmlRoot(ElementName = "Article")]
        public class Article
        {
            private string codeBarre;
            private string quantite;
            private int palette;
            private int numero_article;
     
            [XmlElement(ElementName = "CodeBarre")]
            public string getCode
            {
                get { return codeBarre; }
                set { codeBarre = value; }
            }
     
            [XmlElement(ElementName = "Quantite")]
            public string getQuantite 
            {
                get { return quantite;}
                set { quantite = value;}
            }
     
            [XmlElement(ElementName = "Palette")]
            public int getPalette {
                get { return palette; }
                set { palette = value;}
            }
     
            [XmlElement(ElementName = "NumeroArticle")]
            public int getNumero 
            {
                get { return numero_article;}
                set { numero_article = value;}
            }
    }

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Ah ben c'est normal, tu sérialises les éléments un par un.
    Il faut sérialiser tout la liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            public int Make(List<Article> list)
            {
                XmlSerializer x = new XmlSerializer(typeof(List<Article>));
                x.Serialize(writer, list);
                return 0;
            }
    EDIT: et au fait, pouquoi ces "return 0" dans chaque fonction ? En C# il y a la gestion d'exception, tu n'as pas besoin de renvoyer des codes d'erreur...

  9. #9
    Membre habitué
    Avatar de Spidermeu
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Points : 151
    Points
    151
    Par défaut
    je ne suis pas du tout codeur.. je fais ca pour dépanné. Ensuiçte on m'a appris a ne jamais utiliser de void (donc souvent je retourne 0... il faut plutot retourner 1 ??)


    EDIT : Parfait ca fonctionne, merci infiniment !!!

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par Spidermeu Voir le message
    on m'a appris a ne jamais utiliser de void (donc souvent je retourne 0... il faut plutot retourner 1 ??)
    Ben celui qui t'a dit ça t'a dit une connerie... il devait coder en C il y a très longtemps
    Tu peux tout à fait utiliser void, ça n'a pas été inventé pour faire joli
    Dès qu'une fonction n'a aucune donnée ou information à renvoyer, utilise void.

    Citation Envoyé par Spidermeu Voir le message
    EDIT : Parfait ca fonctionne, merci infiniment !!!
    Pense au tag alors

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

Discussions similaires

  1. Serialisation d'une liste d'objets
    Par E@gle_One dans le forum Langage
    Réponses: 3
    Dernier message: 07/01/2008, 18h14
  2. Créer une liste d'objets statiques dans une classe
    Par crossbowman dans le forum C++
    Réponses: 3
    Dernier message: 13/03/2006, 09h11
  3. methode qui retourne une liste d'objets du meme type
    Par anoukhan dans le forum Oracle
    Réponses: 8
    Dernier message: 12/01/2006, 18h38
  4. Tri d'une liste d'objet CObList
    Par cjacquel dans le forum MFC
    Réponses: 1
    Dernier message: 13/07/2005, 13h50
  5. [MFC] Retourner une liste d'objets
    Par 1cado dans le forum MFC
    Réponses: 10
    Dernier message: 28/07/2003, 12h11

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