Serializer plusieurs collections d'objets dans un seul fichier binaire

Résolu
BasicZx81 Messages postés 140 Date d'inscription samedi 5 mars 2011 Statut Membre Dernière intervention 13 août 2013 - 31 mars 2011 à 20:17
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre 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...

8 réponses

foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
31 mars 2011 à 21:07
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
3
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
1 avril 2011 à 08:26
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 ...
3
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
1 avril 2011 à 16:51
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)
3
BasicZx81 Messages postés 140 Date d'inscription samedi 5 mars 2011 Statut Membre Dernière intervention 13 août 2013
31 mars 2011 à 20:19
Zut j'ai fait une faute de frappe, merci de corriger :
Public Voitures As New SortedList(Of String, Voiture)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BasicZx81 Messages postés 140 Date d'inscription samedi 5 mars 2011 Statut Membre Dernière intervention 13 août 2013
31 mars 2011 à 21:46
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....
0
BasicZx81 Messages postés 140 Date d'inscription samedi 5 mars 2011 Statut Membre Dernière intervention 13 août 2013
1 avril 2011 à 13:43
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.
0
BasicZx81 Messages postés 140 Date d'inscription samedi 5 mars 2011 Statut Membre Dernière intervention 13 août 2013
1 avril 2011 à 16:22
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.
0
BasicZx81 Messages postés 140 Date d'inscription samedi 5 mars 2011 Statut Membre Dernière intervention 13 août 2013
1 avril 2011 à 16:48
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.
0
Rejoignez-nous