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 :

[C#] Déserialisation d'objets


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    hdd
    hdd est déconnecté
    Membre confirmé Avatar de hdd
    Profil pro
    Inscrit en
    Février 2004
    Messages
    105
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2004
    Messages : 105
    Par défaut [C#] Déserialisation d'objets
    Bonjour,

    J'utilise des classes sérialisables pour l'enregistrement du paramétrage de mon application :

    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
    /// <summary>
            /// Enregistre les données du paramètrage
            /// </summary>
            public void enregistrer()
            {
                // Mise à jour de l'état du paramétrage
                verifierParametragePasserelle();
     
                // Enregistrement du paramétrage
                String nomFichier = new StringBuilder(Application.RepertoireApplication).Append(Constantes.REPERTOIRE_DONNEES).Append("\\parametrageAcheterLouerFr.bin").ToString();
                Stream fluxSortie = File.Open(nomFichier, FileMode.OpenOrCreate);
                BinaryFormatter sortie = new BinaryFormatter();
                sortie.Serialize(fluxSortie, this);
                fluxSortie.Close();
            }
     
            /// <summary>
            /// Charge le dernier paramètrage enregistré
            /// </summary>
            /// <returns>Paramètrage (null en cas d'erreur)</returns>
            public static Parametrage charger()
            {
                try
                {
                    String nomFichier = new StringBuilder(Application.RepertoireApplication).Append(Constantes.REPERTOIRE_DONNEES).Append("\\parametrageAcheterLouerFr.bin").ToString();
     
                    if (File.Exists(nomFichier))
                    {
                        Stream fluxEntree = File.OpenRead(nomFichier);
                        BinaryFormatter entree = new BinaryFormatter();
                        Parametrage parametrage = (Parametrage)entree.Deserialize(fluxEntree);
                        fluxEntree.Close();
                        return parametrage;
                    }
                    else
                        return new Parametrage();
                }
                catch (Exception e)
                {
                    Evenement.enregistrerEvenement(System.Diagnostics.TraceEventType.Error, ConstantesEvenements.ERREUR_TRAITEMENT, "Parametrage.charger", e);
                    return null;
                }
            }
    Si tout fonctionne bien quand je lance l'application à partir de VS 2005, la désérialisation ne fonctionne plus lorsque j'ai installé l'application et que je l'utilise en dehors de VS 2005. J'obtiens l'erreur suivante lors de la désérialisation :

    Parametrage.chargerImpossible d'effectuer un cast d'un objet de type 'Package.Metiers.Parametrage' en type 'Package.Metiers.Parametrage'.
    à Package.Metiers.Parametrage.charger()


    Je ne comprends pas pourquoi il ne peut pas charger un objet qu'il a lui même créé plus tôt ...

    Petite remarque : toutes mes classes sérialisables et qui ne fonctionnent pas sont dans des fichiers dll inclus dans la répertoire racine de mon application.

  2. #2
    Membre Expert Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Par défaut
    quand tu installes ton application, est-ce que tes dll sont bien déployées ???

  3. #3
    hdd
    hdd est déconnecté
    Membre confirmé Avatar de hdd
    Profil pro
    Inscrit en
    Février 2004
    Messages
    105
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2004
    Messages : 105
    Par défaut
    En fait, les dll ne sont pas forcément incluses à l'installation de l'application. Elles sont ajoutées dans l'application lorsqu'elles sont nécessaires.

    Pour "éviter" le problème, j'ai remplacé l'ancien système par un enregistrement dans des fichiers XML (et ça me posera aussi moins de problèmes si je dois rajouter ou retirer des champs dans mes classes).

  4. #4
    Membre Expert Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Par défaut
    au déploiement tu dois inclure tes DLL...

    Comment veux-tu créer une instance d'un objet dont on ne connait pas le type....

    si tu inclus les dll, le type sera connu et ta deserialisation marchera

  5. #5
    hdd
    hdd est déconnecté
    Membre confirmé Avatar de hdd
    Profil pro
    Inscrit en
    Février 2004
    Messages
    105
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2004
    Messages : 105
    Par défaut
    Mes dll sont des modules pouvant être intégrés (ou pas) à l'application, c'est pour ça que je ne les inclus pas dans les références de mon projet.

  6. #6
    Membre Expert Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Par défaut
    Je suis d'accord mais si tu ne les inclus pas, tu ne peux pas les utiliser.. c'est plutot logique...

    donc au moment ou tu deserialise, tes dll doivent etre incluses...

Discussions similaires

  1. Déserialiser une liste d'objets : la galère
    Par buffalo974 dans le forum Général Python
    Réponses: 3
    Dernier message: 05/04/2014, 14h41
  2. déserialisation d'un objet dans un jar
    Par LoksBur dans le forum Persistance des données
    Réponses: 2
    Dernier message: 07/06/2012, 14h27
  3. [boost::serialization] Déserialisation d'un objet
    Par darkrojo dans le forum Boost
    Réponses: 0
    Dernier message: 06/02/2011, 18h32
  4. Réponses: 1
    Dernier message: 13/12/2010, 10h59
  5. Probleme de déserialisation d'objets
    Par bj304075 dans le forum Langage
    Réponses: 3
    Dernier message: 27/11/2007, 14h20

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