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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.