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

VB.NET Discussion :

[VB.Net/ 1.1] Comment désérialiser des classes modifiées ?


Sujet :

VB.NET

  1. #1
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 79
    Points : 57
    Points
    57
    Par défaut [VB.Net/ 1.1] Comment désérialiser des classes modifiées ?
    Supposons que j'ai une classe Class1 avec une seule propriété (Prop1), que je déclare comme serializable et je l'enregistre dans un fichier en faisant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim myObj as New Class1
    Dim FS As New FileStream("c:\test.txt", FileMode.Create)
    Dim BinFormatter As New Binary.BinaryFormatter
    BinFormatter.Serialize(FS, myObj)
    FS.Close()
    Jusque là ça va, mais supposons que pour une raison X, je modifie ma classe et j'ajoute une nouvelle propriété (Prop2), alors, ce que j'utilisais pour deserializer c'était:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim fs As FileStream
    Dim BinFormatter As New Binary.BinaryFormatter
    Dim obj As Object
    dim myObj as Class1
    fs = New System.IO.FileStream("c:\test.txt", IO.FileMode.OpenOrCreate)
    obj = BinFormatter.Deserialize(fs)
    myObj = CType(obj, Class1)
    fs.Close()
    Là j'obtiens un erreur parce l'objet sérializé avait qu'une seule propriété, mais j'ai modifié la classe et là le nombre de propriétés ne correspond pas. Pourtant je voudrais qu'il l'ouvre quand même. Je voudrais juste qu'il ignore les propriétés qui n'ont pas été sérializées.

    Merci de votre aide.
    [/code]

  2. #2
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Peut être en derivant ta classe avec les nouvelles propriétés de ta première classe :
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  3. #3
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 83
    Points : 100
    Points
    100
    Par défaut
    Je voulais essayer des solutions à ton problème passant par des interfaces ou l'utilisation de l'attribut [NonSerialized] sur les nouvelles propriétés... mais je n'ai pas réussi à reproduire le problème !

    J'ai créé une classe Personne avec une propriété publique de type string, et j'en ai sérialisé une instance.
    Puis j'ai ajouté une propriété de type int... et la désérialisation s'est passée sans problème !
    Je suis assez surpris car il me semblait avoir rencontré le même problème que toi il y a quelques mois...

    Quelle version du framework utilises-tu ? Pour ma part, c'est la dernière version du 2.0.
    Je suis en C#, mais ça ne devrait pas faire de différence...

    Ton erreur se produit à quelle ligne ?
    Lors de la désérialisation ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    obj = BinFormatter.Deserialize(fs)
    Ou bien lors du transtypage ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myObj = CType(obj, Class1)
    Si c'est lors de la désérialisation, tu peux toujours essayer de marquer les nouvelles propriétés de l'attribut [NonSerialized].

    Si c'est lors du transtypage, tu peux essayer de définir deux interfaces : IClass1 et INewClass1. IClass1 contiendrait les propriétés de ton ancienne Class1 et INewClass1 les nouvelles. La nouvelle Class1 implémente les deux. Et ton transtypage serait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myObj = CType(obj, IClass1)

  4. #4
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 79
    Points : 57
    Points
    57
    Par défaut
    Salut,
    J'utilisais le Framework 1.1 lorsque j'ai posté ce problème, mais maintenant j'ai passé au 2.0 et l'erreur ne se produit plus.

    Mon problème est donc résolu. :-)

    Le problème se produisait lors de la désérialisation. Et je ne pouvais pas mettre les nouvelles propriétés [NonSerialized] parce que j'en avais besoin pour les fichier enregistré après la modification, c'était juste pour assurer une compatibilité avec les anciens fichiers que je ne voulais pas que l'erreur se produise.

  5. #5
    Membre expert

    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    1 737
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 737
    Points : 3 137
    Points
    3 137
    Par défaut
    pour info :

    avec la sérialisation XML il est possible de modifier sa classe et d'utiliser les fichiers sérialisés réalisés avec une ancienne version, ce qui correspond est restaurés, sinon ca passe à la trappe, ce qui n'est pas possible avec SOAP ou la sérialisation binaires

    l'attribut NonSerialized n'affecte pas la sérialisation XML

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

Discussions similaires

  1. [C#][ADO.NET][2.0] Comment inserer des enregistrement ....
    Par doccpu dans le forum Accès aux données
    Réponses: 2
    Dernier message: 02/03/2006, 14h39
  2. Réponses: 2
    Dernier message: 01/02/2006, 15h02
  3. comment utilisé des classes toute prêtes
    Par Burinho dans le forum Langage
    Réponses: 3
    Dernier message: 23/01/2006, 22h18
  4. [VB.NET][excel][word] comment afficher des fichiers?
    Par leptityugi dans le forum Windows Forms
    Réponses: 8
    Dernier message: 09/11/2005, 09h15
  5. [debutant] Comment ajouter des .class ?
    Par Slein dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 30/04/2004, 14h30

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