Serialisation binaire et partage de référence
Bonjour,
Voila, donc j'ai un problème, que visiblement je ne retrouve pas dans les tuto et autres cours que j'ai pu aborder sur le sujet.
Je souhaite simplement serialiser et déserialiser des objets. La sérialisation se fait sans trop de problème, mais la désérialisation quand a elle n'est pas complète.
En effet, j'ai une instance A, qui référence B, une classe C, qui référence également B. Lorsque je sérialise, puis désérialise tout ce joli petit monde, je me retrouve avec A, qui référence un objet B, et C qui référence un objet B', identique à B, mais avec une référence différente.
Voici mon code de sérialisation
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
Public Shared Sub SerializeAll()
Dim stream As New FileStream(uni & extension, FileMode.Create)
Dim bf As BinaryFormatter = New BinaryFormatter()
bf.Serialize(stream, GlobalManager.GetInstance().BacManager)
bf.Serialize(stream, GlobalManager.GetInstance().DechetManager)
bf.Serialize(stream, GlobalManager.GetInstance().ProfilManager)''contient des bacs, gérés par le bac manager
bf.Serialize(stream, GlobalManager.GetInstance().SacManager)
bf.Serialize(stream, GlobalManager.GetInstance().Demographie)''contient des profils, qui sont gérés par mon profil manager
stream.Close()
End Sub |
Ensuite, la désérialisation :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| Dim stream = New FileStream(uni & extension, FileMode.Open, FileAccess.Read, FileShare.Read)
Dim formatter = New BinaryFormatter()
Try
Dim bm = DirectCast(formatter.Deserialize(stream), BacManager)
Dim dm = DirectCast(formatter.Deserialize(stream), DechetManager)
Dim pm = DirectCast(formatter.Deserialize(stream), ProfilManager)
Dim sm = DirectCast(formatter.Deserialize(stream), SacManager)
Dim demo = DirectCast(formatter.Deserialize(stream), Demographie)
returnList.Add(bm)
returnList.Add(dm)
returnList.Add(pm)
returnList.Add(sm)
returnList.Add(demo)
Catch ex As Exception
Finally
stream.Close()
End Try |
Je me suis bien assuré que AVANT sérialisation, les références sont identiques (donc non, je ne fait pas de copies inutiles, j'ai bien mes objets A et C qui pointent vers le meme objet C)
J'ai pensé a une solution pour contourner ce problème, mais elle ne me semble vraiment pas propre, et je pense que j'ai simplement du louper quelque chose dans la sérialisation, mais je n'arrive pas a mettre le doigt dessus ...
Cordialement,
Christopher
Edit : problème résolu.
J'ai fait mon propre système de partage de référence en utilisant la reflexion.
Plus de soucis d'objet dupliqués.