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]Pourquoi ma sérialisation binaire d'ArrayList ne fonctionne pas ?


Sujet :

VB.NET

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 77
    Points : 72
    Points
    72
    Par défaut [VB.NET]Pourquoi ma sérialisation binaire d'ArrayList ne fonctionne pas ?
    Bonjour,
    j'essaie de sérialiser un ArrayList d'objets. Mais lorsque je désérialise, ça ne marche pas. Je me retrouve avec des objets null.
    Voici le code pour la sérialisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim liste AsNew ArrayList
    liste.Add(poste1)
    liste.Add(poste2)
    Dim s As Stream = File.Create("postes.bin") 
    Dim b As BinaryFormatter = New BinaryFormatter
    b.Serialize(s, liste)s.Close()
    
    et la désérialisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim s As Stream
    Dim b As BinaryFormatter
    s = New FileStream("postes.bin", FileMode.Open, FileAccess.Read, FileShare.Read)
    b = New BinaryFormatter
    Dim liste As ArrayList = DirectCast(b.Deserialize(s), ArrayList)
    poste1 = DirectCast(liste.Item(0), Poste)
    poste2 = DirectCast(liste.Item(1), Poste)
    s.Close()
    
    C'est par la suite quand j'utilise la variable poste1 (par ex) que l'erreur apparait.
    Quelqu'un voit-il l'erreur?

  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
    Et bien commençons par la fin:
    As-tu débugger pas à pas ta méthode de désérialisation et récupérer quelquechose pour liste, post1 et poste2

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 77
    Points : 72
    Points
    72
    Par défaut
    liste marche, puisqu'en dessous je fais un liste.item(0) qui passe.
    Par contre apres un poste1.toString() ne marche pas...
    Ce serait le Cast de la désérialisation?

  4. #4
    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
    franchement je ne vois pas le lien avec ce que tu me réponds et
    ...
    Je me retrouve avec des objets null...
    Comme tu es en VB.Net, si tu ne l'a déjà fait met en entête de ta page de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Option Explicit On
    Option Strict On

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 77
    Points : 72
    Points
    72
    Par défaut
    Au niveau de la désérialisation:
    liste contient 4 objets Nothing

    C'est donc la sérialisation qui ne fonctionne pas...


  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 77
    Points : 72
    Points
    72
    Par défaut
    En fait la sérialisation se fait à l'arrêt d'une apli ASP (méthode Application_End).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim liste As New ArrayList()
    liste.Add(poste1)
    liste.Add(poste2)
    liste.Add(poste3)
    liste.Add(poste4)
    Dim s As Stream
    s = File.Open("postes.bin", FileMode.Create) 
    Dim b As BinaryFormatter = New BinaryFormatter()
    b.Serialize(s, liste)
    s.Close()
    
    La méthode Application_Error() est appelée après la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim b As BinaryFormatter = New BinaryFormatter()
    Maintenant je sais où est l'erreur. Mais c'est quoi l'erreur?

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 77
    Points : 72
    Points
    72
    Par défaut
    J'ai trouvé la solution : c'était ma classe Poste qui n'était pas bonne.
    Quelle différente y a-t-il entre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Serializable()> Public Class
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <SerializableAttribute()> Public Class
    ?

  8. #8
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 149
    Points : 89
    Points
    89
    Par défaut
    up,
    je travaille en c# mais j'aimerais bien savoir et éventuellement adapter à mon code.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Points : 627
    Points
    627
    Par défaut
    Citation Envoyé par fuhraih Voir le message
    J'ai trouvé la solution : c'était ma classe Poste qui n'était pas bonne.
    Quelle différente y a-t-il entre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Serializable()> Public Class
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <SerializableAttribute()> Public Class
    ?
    Normalement, aucune. Le compilateur sait reconnaitre un attribut meme si tu omets le suffixe "-Attribute".

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 13/04/2006, 15h54
  2. Réponses: 12
    Dernier message: 14/07/2005, 16h55
  3. Réponses: 9
    Dernier message: 31/05/2005, 10h05
  4. Réponses: 5
    Dernier message: 24/05/2005, 10h09
  5. [.NET] Pourquoi redéfinir la méthode dispose() d'une forme?
    Par Polyptyx dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 07/09/2004, 12h10

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