Bonjour, dans une classe managée j'ai d'autres instances de classes managées. Pour sérialiser et désérialiser ma classe principale, j'appelle directement un Runtime::Serialization::Formatters::Binary::BinaryFormatter.
Je rajoute l'attribut [Serializable] de l'assembleur au début de chaque déclaration de classe.

Le problème c'est que lorsque je désérialise l'instance de la classe principale à partir d'un fichier je ne récupère que les variables de l'instance tandis que les instances de classes managées prennent leur valeur par défaut. Est-ce qu'il serait possible de faire le plus simple possible pour contourner ce problème. Est-ce que par exemple il est nécessaire d'utiliser l'interface ISerializable ?

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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
[Serializable]
public ref class A
{
public:
      // ...
};
 
[Serializable]
public ref class B
{
public:
      // ...
      A ^pA;
};
 
int main(...)
{
     Runtime::Serialization::Formatters::Binary::BinaryFormatter ^bf;
     bf = gcnew Runtime::Serialization::Formatters::Binary::BinaryFormatter;
     B ^instance;
     String ^filename = "...";
 
     // Serialisation
     IO::StreamWriter ^writer = gcnew IO::StreamWriter(filename);
     bf->Serialize(writer->BaseStream, instance);
     writer->Close();
 
     // Deserialisation
     IO::StreamReader ^reader = gcnew IO::StreamReader(filename);
     instance = (B^) (bf->Deserialize(reader->BaseStream));
     reader->Close();
 
     // A n'est pas initialisé à partir des paramètres déclarés à la sérialisation
     //...
}