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 //... }
Partager