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 :

Rendre générique la déserialization


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2013
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 36
    Par défaut Rendre générique la déserialization
    Bonjour à tous je suis un débutant en c#,

    Alors voilà ce que j'aimerais réaliser c'est une méthode générique de désérialization j'ai fais comme ça pour le moment mais ça ne marche pas vraiment.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public string charger<T>(T objectToSerialize, string xmlPath)
    {
                StreamReader lecture = new StreamReader(xmlPath);
                XmlSerializer serializer = new XmlSerializer(typeof(T));
                T temp = (T)serializer.Deserialize(lecture);
                lecture.Close();
                return temp; 
    }

    Mon but était de retourner les valeurs de mon fichier pour pouvoir les utilisés mais il semblerait que le type ne va pas car il me dit que c'est impossible de convertir temp en string.

    Merci de votre aide.

  2. #2
    Membre très actif
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 612
    Par défaut
    Salut
    -----

    J'ignore si c'est exactement ce que tu cherches, mais voici mes routines de sérialisation/désérialisation génériques qui fonctionnent dans un de mes programmes :


    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
             //////////////////////////////////////////////////////////////////////////////////////////////
            //                            SÉRIALISE L'OBJET DANS UN FICHIER XML                         //
            //////////////////////////////////////////////////////////////////////////////////////////////
     #region SerializeXml
            //--------------------------------------------------------------------------------------------
            /// <summary>Sérialise un objet sérialisable dans un fichier Xml</summary>
            /// <typeparam name="T">Type de l'objet</typeparam>
            /// <param name="obj">Objet à sérialiser</param>
            /// <param name="fileName">Nom du fichier Xml</param>
            /// <returns>True si l'opération a réussi</returns>
            //--------------------------------------------------------------------------------------------
            public static bool SerializeXml<T>(T obj, string fileName)
            {
                bool result = false;                                            // par défaut, échec
     
                try
                {
                    XmlSerializer serializer = new XmlSerializer(typeof(T));    // créer un sérialiseur de type requis
                    using (var writer = new StreamWriter(fileName))             // créer écrivain de flux sur fichier
                    {
                        serializer.Serialize(writer, obj);                      // Sérialiser l'objet
                    }
                    result = true;                                              // si on arrive ici, c'est que tout est OK
                }
                catch { }                                                       // erreur
     
                return result;                                                  // retourner résultat de l'opération
            }
     #endregion
     
            //////////////////////////////////////////////////////////////////////////////////////////////
            //                          DÉSÉRIALISE L'OBJET DEPUIS UN FICHIER XML                       //
            //////////////////////////////////////////////////////////////////////////////////////////////
     #region DeserializeXml
            //--------------------------------------------------------------------------------------------
            /// <summary>Désérialise un objet à partir d'un fichier Xml</summary>
            /// <typeparam name="T">Type d'objet à récupérer</typeparam>
            /// <param name="fileName">Nom du fichier Xml</param>
            /// <returns>Objet désérialiser, ou valeur par défaut si échec</returns>
            //--------------------------------------------------------------------------------------------
            public static T DeserializeXml<T>(string fileName)
            {
                T result = default(T);                                          // valeur par défaut en cas d'échec (pas forcément nullable)
     
                try
                {
                    XmlSerializer serializer = new XmlSerializer(typeof(T));
                    using (StreamReader reader = new StreamReader(fileName))
                    {
                        result = (T)serializer.Deserialize(reader);
                    }
                }
                catch {}
                return result;                                                  // retourner résultat, ou default si échec
            }
     #endregion
    A+
    Claude

  3. #3
    Membre averti
    Inscrit en
    Février 2013
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 36
    Par défaut
    Merci pour le code de la désérialization, pourriez vous m'expliquer comment m'en servir car je ne comprends pas comment ça marche. J'arrive à désérializer un fichier xml mais sans passer par une méthode générique.

    A+

  4. #4
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Apparemment:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Class1 c1 = SerializationTool.DeserializeXml<Class1>(filename1);
    Class2 c2 = SerializationTool.DeserializeXml<Class2>(filename2);
    En admettant que la classe que ClaudeBg a posté s'appelle "SerializationTool"..

  5. #5
    Membre averti
    Inscrit en
    Février 2013
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 36
    Par défaut
    Désolé je me suis mal fait comprendre en fait j'arrive à appeler la méthode mais ce que je ne comprends pas c'est comment récupérer une valeur... Merci de votre aide.

  6. #6
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Pour désérialiser un fichier, il te faut une classe qui représente la structure de ton fichier. Dans mon message précédent, j'ai mis un exemple avec 2 de ces classes (Class1 & Class2). Je montre comment récupérer les données dans un objet à partir du chemin vers le fichier.

    Le mieux est de te renseigner sur internet pour voir comment marche la serialization. Tu peux déjà regarder la méthode XmlSerializer.Deserialize sur msdn, elle te montrera un exemple complet.

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

Discussions similaires

  1. Rendre générique une fonction d'ouverture de formulaire
    Par clickandgo dans le forum VBA Access
    Réponses: 5
    Dernier message: 30/01/2015, 12h03
  2. Réponses: 2
    Dernier message: 20/05/2011, 13h15
  3. Requête à rendre générique
    Par LampeRouge dans le forum Débuter
    Réponses: 6
    Dernier message: 08/02/2010, 19h09
  4. Comment rendre générique la structure de données d'un ListView ?
    Par altropus dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 12/12/2009, 10h14
  5. Réponses: 25
    Dernier message: 17/11/2008, 09h11

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