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 XML d'une classe avec une propriété de type enum


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de obitskater
    Profil pro
    Développeur .NET
    Inscrit en
    Février 2008
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2008
    Messages : 163
    Par défaut Serialisation XML d'une classe avec une propriété de type enum
    Bonjour à tous,

    Je rencontre un petit problème avec la serialisation XML d'une de mes classes:

    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
     
     
    public class Personne
    {
        #region constructors
     
        public Personne()
        {
     
        }
     
        public Personne(string nom, string prenom, int age)
        {
            this.Nom = nom;
            this.Prenom = prenom;
            this.Age = age;
        }
     
        #endregion
     
     
        #region properties
     
        public string Nom { get; set; }
     
        public string Prenom { get; set; }
     
        public int Age { get; set; }
     
        public SexeEnum Sexe { get; set; }
     
        #endregion
    }
     
    public enum SexeEnum
    {
        Homme,
        Femme,
        Aucun
    }
    Voici le code qui sérialise la classe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    //_listPersonne, PersonneFileName, ZipPersonne ont été implémenté ailleurs, ce n'est pas eux le problème
     
    XmlSerializer xs = new XmlSerializer(typeof(List<Personne>));
    using (MemoryStream streamPersonneInfo = new MemoryStream())
    {
        xs.Serialize(streamColumnInfo, _listPersonne);
        streamPersonneInfo.Position = 0;
        if (streamPersonneInfo.CanWrite)
        {
            ZipLayout.Entries.Add(streamPersonneInfo, PersonneFileName);
        }
        streamPersonneInfo.Close();
    }
    Lorsque j'execute j'ai une erreur au moment de la création du XmlSerializer, il me dit que
    "Une erreur s'est produite lors de la réflexion du type 'System.Collections.Generic.List`1[Personne]'."
    C'est la propriété Sexe de type enum qui pose soucis, car quand je l'enlève, tout marche bien, j'arrive bien à serializer.
    Donc comment faire pour serializer une classe avec une propriété de type enum?

  2. #2
    Membre éprouvé
    Inscrit en
    Mars 2005
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 131
    Par défaut
    Bonjour

    Il faut décorer les vleurs de l'énumération avec l'attribut XmlEnumAttribute :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public enum SexeEnum
    {
     
    [XmlEnum(Name = "Homme")]
        Homme,
     
    [XmlEnum(Name = "Femme")]
        Femme,
    [XmlEnum(Name = "Aucun")]
        Aucun
    }

  3. #3
    Membre confirmé Avatar de obitskater
    Profil pro
    Développeur .NET
    Inscrit en
    Février 2008
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2008
    Messages : 163
    Par défaut
    Merci pour ta réponse, mais il n'y a aucun changement... Toujours l'erreur

  4. #4
    Membre éprouvé
    Inscrit en
    Mars 2005
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 131
    Par défaut
    Tu peux vérifier stp exactement quel instruction léve l'exception ? j'ai recopié ton code et la sérialisation de l'objet liste marche bien, donc je croix que ce qui vient aprés le xs.serialize qui pose probléme

  5. #5
    Membre confirmé Avatar de obitskater
    Profil pro
    Développeur .NET
    Inscrit en
    Février 2008
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2008
    Messages : 163
    Par défaut
    Ben chez moi ça se lève avant, l'exception se lève exactement au niveau de XmlSerializer xs = new XmlSerializer(typeof(List<Personne>));

    Après, mon enum se trouve en réalité dans un autre projet, dans une classe regroupant toutes mes enums

    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
     
    public static class Enums
    {
     
    //.......
     
    public enum SexeEnum
    {
        Homme,
        Femme,
        Aucun
    }
     
    //........
     
    }

  6. #6
    Membre éprouvé
    Inscrit en
    Mars 2005
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 131
    Par défaut
    Bein voilà l'erreur

    t'as deux solutions :

    1. Enléve le mot clé static de la class Enums

    2. Sort ton énumération de la class Enums (je vois pas l'intérêt en plus )

    tiens moi au courant

  7. #7
    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 : 43
    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
    Par défaut
    Citation Envoyé par obitskater Voir le message
    Ben chez moi ça se lève avant, l'exception se lève exactement au niveau de XmlSerializer xs = new XmlSerializer(typeof(List<Personne>));

    Après, mon enum se trouve en réalité dans un autre projet, dans une classe regroupant toutes mes enums

    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
     
    public static class Enums
    {
     
    //.......
     
    public enum SexeEnum
    {
        Homme,
        Femme,
        Aucun
    }
     
    //........
     
    }
    J'ai reproduit le problème, c'est à cause du fait que ton enum est défini dans une classe statique. Si tu enlèves le modificateur static ça fonctionne. De toutes façons, ce n'est pas une très bonne manière de regrouper les enums... mets les plutôt dans leur propre namespace si tu veux les séparer du reste

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  2. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  3. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  4. Réponses: 6
    Dernier message: 15/07/2009, 14h00
  5. Réponses: 9
    Dernier message: 08/07/2009, 17h10

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