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 générique incomplète. [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 34
    Par défaut Sérialisation générique incomplète.
    Bonjour,

    je souhaite créer un programme permettant la sérialisation de mes classes.

    Je possède deux classes : Chien et Chat (dérivant de Animal).

    Actuellement dans ma classe de Service, j'ai deux méthodes : CreateChien & CreateChat, permettant la création des objets Chien et Chat selon différents paramètres.

    Jusque là, rien de bien difficile.
    CreateChien dans la classe CreateService.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public Chien CreateChien(string nomChien, string chenilChien, int anneeChien)
     
    {
     
     	Chien myDog = new Chien(nomChien, chenilChien, anneeChien);
     
     	return myDog;
     
    }

    Puis dans mon Main, j'appelle ma méthode ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CreateChien Rex = new CreateChien();
    Rex.CreateChien ("Rex", "Chenil BoisVert", 7);
    Toujours dans mon Main, je lance la sérialisation de mon objet :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    XmlSerializer Serializer = new XmlSerializer(typeof(Chien));
    StreamWriter Writer = new StreamWriter("Rex.xml", false);
    Serializer.Serialize(Writer, Rex);
    Writer.Close();
    MAIS ; ERREUR.

    Lors du lancement du programme, une erreur apparait, alors que mon fichier XML est bien créé mais vide.

    "{"Impossible d'effectuer un cast d'un objet de type 'Exercice.Services.CreateChien' en type 'Exercice.Domaine.Chien'."}"
    On m'a donc conseillé de créer une méthode permettant la récupération des propriétés de mon objet (ici mon Chien), afin de permettre la sérialiation...

    Je souhaite donc créer une méthode "GetChien" (& "GetChat") qui me permettrait la récupération des mes objets dans le but d'une sérialisation ultérieur.

    Mais je ne sais comment faire...

    De l'aide serait la bienvenue, merci d'avance !

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Par défaut
    Salut,

    L'erreur provient du fait que tu déclares un XmlSerializer pour le type Chien, mais tu l'utilises pour sérialiser un objet de type CreateChien.

    Il faudrait que tu fasses quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CreateChien Rex = new CreateChien();
    Chien monChien = Rex.CreateChien ("Rex", "Chenil BoisVert", 7); // ICI
     
    XmlSerializer Serializer = new XmlSerializer(typeof(Chien));
    StreamWriter Writer = new StreamWriter("Rex.xml", false);
    Serializer.Serialize(Writer, monChien); // ICI
    Writer.Close();
    Après comme tu peux le voir il est ennuyeux (je trouve) de devoir instancier un objet CreateChien pour créer un chien ! Donc soit rendre la méthode static, soit mettre le constructeur paramétré directement sur le chien

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 34
    Par défaut
    Ta méthode fonctionne, et je t'en remercie.

    Cependant, comment faire pour récupérer les propriétés de mon objet "Chien" ?

    J'en aurais besoin par la suite dans mon Web Services qui doit m'afficher dans la console les propriétés de mon chien ; Rex, Chenil Bois Vert et 7.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Par défaut
    Tu veux dire pour désérialiser ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    using (StreamReader sr = new StreamReader("Rex.xml"))
    {
        XmlSerializer ser = new XmlSerializer(typeof(Chien));
        Chien rex = (Chien)ser.Deserialize(sr);
     
        Console.WriteLine(string.Concat("Nom : ", rex.Nom));
    }

  5. #5
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CreateChien Rex = new CreateChien();
    Rex.CreateChien ("Rex", "Chenil BoisVert", 7);
    C'est quoi cette classe CreateChien ? Là tu crées un objet CreateChien, tu appelles une méthode dessus, et tu ne récupères pas le résultat de la méthode... donc l'objet Chien créé n'est jamais utilisé.

    D'ailleurs, est-ce vraiment ton code réel ? Le langage C# n'autorise pas à déclarer une méthode qui a le même nom que la classe (sauf le constructeur bien sûr)... à moins qu'elle ne soit héritée d'une classe de base ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 34
    Par défaut
    Je précise un peu plus mon idée.

    Dans ma solution j'ai plusieurs projets :
    -Domaine ( contenant la classe Animal, Chien, Chat, Reptiles, etc).
    -Services ( contenant la classe CreateService avec les méthodes CreateChien, CreateChat, etc).
    -Console (application console).

    Dans mon Main je souhaite créer mon objet Chien PUIS le sérialiser dans un fichier XML.
    Pour la création je doit passer par ma méthode de Service CreateChien.

    La façon de faire de Jaco67 fonctionne dans mon code actuel.

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

Discussions similaires

  1. [XSD] Edition générique / sérialisation
    Par PadawanDuDelphi dans le forum Valider
    Réponses: 0
    Dernier message: 30/09/2013, 15h40
  2. Réponses: 6
    Dernier message: 16/05/2012, 13h35
  3. Interface générique et sérialisation
    Par kendras dans le forum C#
    Réponses: 1
    Dernier message: 23/06/2010, 17h51
  4. SGBD ou sérialisation
    Par tiboleo dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 07/10/2003, 16h18
  5. caractère générique utilisable dans strcmp
    Par barthelv dans le forum C
    Réponses: 9
    Dernier message: 01/08/2003, 16h54

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