2009-05-15 8 views
6

Mam klasę A, która eksponuje wydarzenie. obiekt klasy B subskrybujący zdarzenie. Obie instancje mają również regularne odniesienia do siebie nawzajem. Chciałbym szeregować A i oba obiekty powinny być przeniesione przez przewód, aby zostać zrekonstruowane na drugim końcu. Działa to dobrze, z wyjątkiem tego, że subskrypcja zdarzenia nie jest zachowywana.Zdarzenia seryjne

Myślę, że muszę zaimplementować własnego konstruktora do serializacji, aby "otrzymywać powiadomienia", gdy moje obiekty zostaną przekształcone w postaci szeregowe, aby mógł ponownie przesłać subskrypcję do zdarzenia.

Jednak wygląda na to, że muszę całkowicie wdrożyć selizację poprzez wdrożenie ISerializable. Teraz polegam na atrybutach BinaryFormatter i [Serializable], i tak bardzo to lubię.

Czy ktoś zna sposób, w jaki można uzyskać powiadomienia o deserializacji, a wciąż jest w stanie używać wbudowanego systemu serializacji do automatycznego serializowania & deserializacji mój nieco skomplikowany wykres obiektu dla mnie?

Dzięki, Lucas

Odpowiedz

8

Standard (non-XML) mechanizm serializacji wykorzystuje specjalne atrybuty, aby oznaczyć metody stosowane jako wywołania zwrotne podczas serializacji (de). OnDeserializedAttribute jest tym, czego szukasz. Podobne rozwiązanie implementuje interfejs IDeserializationCallback.

+0

Świetna odpowiedź. Wpatrywałam się w mój kod przez 2 godziny, próbując ustalić, dlaczego moje wydarzenie było zawsze zerowe, mimo że kod subskrypcji działał dobrze. –