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, Héritage, Enumération


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 8
    Par défaut Serialisation XML, Héritage, Enumération
    Bonjour,
    J'ai un problème de sérialisation sous VS2010.
    Pour résumé j'ai:
    -une classe Personne avec 2 classe dérivées : Joueur, Entraineur
    -une énumération Niveau("debutant",...)
    -Dans ma classe Joueur j'ai le niveau.
    -une liste _lesPersonnes qui contient des personnes(joueurs et entraineurs)
    -un formulaire que quand je click sur fermé ca sérialize et ca ferme le formulaire

    Je sérialise comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    FileStream ficOut = File.OpenWrite("lesPersonnes.xml");
                XmlSerializer serializer = new XmlSerializer(typeof(Personne));
                foreach (Personne p in _lesPersonnes)
                {
                    serializer.Serialize(ficOut, p);
                }
                ficOut.Close();
    Quand dans ma liste _lesPersonne je met que des entraineur ca marche(le XML est bien créé et mon frm se ferme) mais dés que je met un joueur ca plante ( aucun message d'erreur mais en pas a pas, dés que VS exécute la méthode Serialize il arrête le code et mon formulaire s'affiche mais ne se ferme pas et mon fichier XML est inchangé).

    J'ai essayer de nommé mes enumérations comme ca mais cela ne marche pas :s
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    [XmlEnum("debutant")]
            debutant,
            [XmlEnum("intermediaire")]
            intermediaire,
            [XmlEnum("amateur")]
            amateur,
            [XmlEnum("professionnel")]
            professionnel
    Vous pouvez m'aidez svp?

    Merci

  2. #2
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 17
    Par défaut
    Bonjour,

    le problème vient du fait que dans tes classes filles, il y a des propriétés en plus par rapport à la mère.

    dans ce cas tu dois dire au sérialiseur d'ignorer la propriété en mettant l'attribut
    "[System.Xml.Serialization.XmlIgnoreAttribute()]" devant les propriétés supplémentaires dans la classe joueur par rapport à la classe mère Personne.

    si tu as par exemple une propriété Age dans Joueur qui n'existe pas dans Personne, le serialiseur ne pourra pas la traiter puisqu'il s'attend à une instance de Personne.

    J'éspère que çà t'aidera.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 8
    Par défaut
    Mais pourtant le sérialiseur marche très bien avec les propriétés spécifiques d'un entraineur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version="1.0"?>
    <Personne xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:type="Entraineur">
      <Nom>testE</Nom>
      <Prenom>aaa</Prenom>
      <DateNaissance>2000-12-09T17:05:06</DateNaissance>
      <email>e@ent.fr</email> <!-- Propriété spécifique aux entraineurs -->
      <Fonction>coach</Fonction> <!-- Propriété spécifique aux entraineurs -->
    </Personne>
    C'est le polymorphisme je crois.

  4. #4
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 17
    Par défaut
    Oui quand tu sérialise chaque type à part, ça marche très bien.
    Le problème c'est quand tu vas sérialiser plusieurs types différents dans un même fichier.

    Le sérialiseur va voir que le premier élément est de type entraineur (avec ses propriétés spécifiques) donc il s'attend à ce que les éléments suivants soient des entraineurs même si lors de la sérialisation tu as bien spécifié "typeof(Personne)"

    Donc soit tu sérialises les objets Personne avec que les propriétés de Personne,
    soit tu sérialise les entraineurs à part et les joueurs à part (2 listes différentes).

    Voilà.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 8
    Par défaut
    J'ai essayer de sérialiser les Joueurs avec une liste à part mais ca fait toujours pareil. Puis j'ai fait quelque chose que j'aurai du faire bien avant ^^ j'ai enlevé mon énumération dans la classe Joueur et ca marche très bien le sérialiseur me sérialise des personnes ( Joueurs et Entraineurs )
    Avec ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    FileStream ficOutJ = File.OpenWrite("lesPersonnes.xml");
                XmlSerializer serializer = new XmlSerializer(typeof(List<Personne>));
                serializer.Serialize(ficOutJ, _lesPersonnes);
                ficOutJ.Close();
    J'ai ca:
    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
    <?xml version="1.0"?>
    <ArrayOfPersonne xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Personne xsi:type="Joueur">
        <Nom>gouh</Nom>
        <Prenom>gae</Prenom>
        <DateNaissance>1991-04-06T00:00:00</DateNaissance>
        <DateDebut>2005-11-02T00:00:00</DateDebut>
      </Personne>
      <Personne xsi:type="Joueur">
        <Nom>carre</Nom>
        <Prenom>rom</Prenom>
        <DateNaissance>1991-04-30T00:00:00</DateNaissance>
        <DateDebut>2000-11-02T00:00:00</DateDebut>
      </Personne>
      <Personne xsi:type="Entraineur">
        <Nom>test</Nom>
        <Prenom>tes</Prenom>
        <DateNaissance>1991-04-30T00:00:00</DateNaissance>
        <email>ert@re.Fd</email>
        <Fonction>coach</Fonction>
      </Personne>
      <Personne xsi:type="Joueur">
        <Nom>j</Nom>
        <Prenom>eaze</Prenom>
        <DateNaissance>2000-12-10T10:47:12</DateNaissance>
        <DateDebut>2002-12-10T10:47:12</DateDebut>
      </Personne>
      <Personne xsi:type="Entraineur">
        <Nom>e</Nom>
        <Prenom>020</Prenom>
        <DateNaissance>2000-12-10T10:47:26</DateNaissance>
        <email>20</email>
        <Fonction>20</Fonction>
      </Personne>
    </ArrayOfPersonne>
    Alors c'est mes énumérations qui ne veulent pas se sérialiser

  6. #6
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 17
    Par défaut
    Je ne pense pas que ce soit les énumérateurs qui causent problème. Car j'ai déjà sérialisé des objets avec des énumérateurs.

    Je ne vois pas comment ton pb a été résolu.
    En tout cas tu dois trouver une solution pour ton énumérateur s'il est l'origine du pb.

Discussions similaires

  1. Serialisation XML et héritage
    Par eldrad95 dans le forum C#
    Réponses: 8
    Dernier message: 19/06/2014, 13h24
  2. Serialisation XML en JavaME
    Par guenievre dans le forum Java ME
    Réponses: 10
    Dernier message: 19/06/2007, 08h32
  3. Serialisation XML avec Xstream !
    Par fabred dans le forum Persistance des données
    Réponses: 4
    Dernier message: 06/06/2007, 08h56
  4. [DOM] [Package] serialisation XML
    Par Overflow64 dans le forum Format d'échange (XML, JSON...)
    Réponses: 10
    Dernier message: 19/10/2004, 16h43
  5. [Concept][Sérialisation] XML ou serializable
    Par christopheJ dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 03/06/2004, 13h11

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