Serializer plusieurs collections d'objets dans un seul fichier binaire [Résolu]

Messages postés
140
Date d'inscription
samedi 5 mars 2011
Dernière intervention
13 août 2013
- - Dernière réponse : foliv57
Messages postés
423
Date d'inscription
vendredi 17 novembre 2006
Dernière intervention
15 juillet 2014
- 1 avril 2011 à 16:51
Bonsoir à tous,
J'ai plusieurs collections instanciés à partir de classes serializables, chaque collections d'objets peut être serializer et dézerialiser individuellement sans problèmes.... J'aimerais savoir si je peux serializer tous ces objets simplement dans un seul fichier et bien sûre pouvoir aussi deserializer à partir de ce même fichier.

Par exemple j'ai une collection d'objet "Personnes" instanciée de cette facon :
Public personnes As New SortedList(Of String, Personne)
et une collection d'objets "Voitures" instanciée de cette facon :
Public personnes As New SortedList(Of String, Personne)

Et voici mes classes correspondantes :
[i]<Serializable()> Public Class Personne
....
End Class

<Serializable()> Public Class Voiture
....
End Class/i

Merci beaucoup si vous pouvez m'aider...
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
423
Date d'inscription
vendredi 17 novembre 2006
Dernière intervention
15 juillet 2014
7
3
Merci
Bonjour,

Lorsque j'ai ce genre de chose à faire, je trouve que le plus simple est de créer une classe (sérailizable aussi) qui englobe ou contient les listes.

Par exemple :
<Serializable()> _
Public Class MesListes
   Private _voitures as SortedList(Of String, Voiture)
   Private _personnes as SortedList(Of String, Personne)

   Public ReadOnly Property Voitures() as SortedList(Of String, Voiture)
      Get
         Return _voitures
      End Get
   End Property

   Public ReadOnly Property Personnes() as SortedList(Of String, Personne)
      Get
         Return _personnes
      End Get
   End Property

   Public Sub New(ByVal voitures as SortedList(Of String, Voiture), _
       ByVal personnes as SortedList(Of String, Personne))
      _voitures = voitures
      _personnes = personnes
   End Sub
End Class


Comme ca il suffit de sérialiser la classe MesListes

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 121 internautes nous ont dit merci ce mois-ci

Commenter la réponse de foliv57
Messages postés
423
Date d'inscription
vendredi 17 novembre 2006
Dernière intervention
15 juillet 2014
7
3
Merci
Vous avez plusieurs possiblitiés.

1) Créer les instances de liste à l'avance et l'instance de MesListes juste avant la sérialization
Dim mesVoitures As New SortedList(String, Voiture)
Dim mesPersonnes As New SortedList(Of String, Personne)

mesVoitures.Add("R19", New Voiture(...))
mesPersonnes.Add("Olivier", New Personne(...))

'Besoin de sérialiser les listes
Dim mesListes As New MesListes(mesVoitures, mesPersonnes)

'Sérialisation de l'objet mesListes ...


2) Créer les instances des listes en même temps que l'instance de l'objet MesListe et travailler avec l'objet MesListes
Dim mesListes as New MesListes(New SortedList(Of String, Voiture), New SortedList(Of String, Personne))

mesListes.Voitures.Add("R19", New Voiture(...))
mesListes.Personnes.Add("Olivier", New Personne(...))

'Sérialisation de l'objet mesListes ...


3) Travailler uniquement avec l'objet MesListes en ajoutant le constructeur ci-dessous pour faciliter la création
Public Sub New() 
    _voitures = New SortedList(Of String, Voiture)
    _personnes = New SortedList(Of String, Personne)
End Sub


Dans ce cas l'utilisation sera
Dim mesListes as New MesListes()

mesListes.Voitures.Add("R19", New Voiture(...))
mesListes.Personnes.Add("Olivier", New Personne(...))

'Sérialisation de l'objet mesListes ...

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 121 internautes nous ont dit merci ce mois-ci

Commenter la réponse de foliv57
Messages postés
423
Date d'inscription
vendredi 17 novembre 2006
Dernière intervention
15 juillet 2014
7
3
Merci
Attention mesListes n'est pas une SortedList(Of String, MesListes), sont type est MesListes. Donc pour déserialiser il faut faire :
meslistes = TryCast(formatter.Deserialize(fs), MesListes)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 121 internautes nous ont dit merci ce mois-ci

Commenter la réponse de foliv57
Messages postés
140
Date d'inscription
samedi 5 mars 2011
Dernière intervention
13 août 2013
0
Merci
Zut j'ai fait une faute de frappe, merci de corriger :
Public Voitures As New SortedList(Of String, Voiture)
Commenter la réponse de BasicZx81
Messages postés
140
Date d'inscription
samedi 5 mars 2011
Dernière intervention
13 août 2013
0
Merci
Merci beaucoup Foliv57 pour votre réponse. Si j'ai bien compris je ne doit plus instancier 'Personnes' et 'Voitures' individuellement mais je doit instancier 'MesListes' qui englobera mes objets 'Personnes' et 'Voitures' ? Du style MesListes.Personnes et MesListes.voitures ?
J'essairais cela et je vous tiens au courant....
Commenter la réponse de BasicZx81
Messages postés
140
Date d'inscription
samedi 5 mars 2011
Dernière intervention
13 août 2013
0
Merci
Merci beaucoup pour votre réponse foliv57, la 1ere solution me semble la plus appropriée. J'essaye cela dés que possible et je vous tiens au courant.
Commenter la réponse de BasicZx81
Messages postés
140
Date d'inscription
samedi 5 mars 2011
Dernière intervention
13 août 2013
0
Merci
Re Foliv57, j'ai bien serializer meslistes mais je n'arrive pas à désieralizer, l'instruction suivante ne marche pas :
meslistes = TryCast(formatter.Deserialize(fs), SortedList(Of String, MesListes))

Dois-je deserializer tous mes objets individuellement (personnes, voitures) ou l'ensemble de meslistes ?

Merci beaucoup si vous pouvez m'aider.
Commenter la réponse de BasicZx81
Messages postés
140
Date d'inscription
samedi 5 mars 2011
Dernière intervention
13 août 2013
0
Merci
Oups, j'ai trouvé mon erreur :

meslistes = TryCast(formatter.Deserialize(fs), MesListes)

Personnes = meslistes.Personnes
Voitures = meslistes.Voitures

Merci beaucoup Foliv57 pour votre aide trés précieuse et ce bout de code qui me rend un immense service.
Commenter la réponse de BasicZx81

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.