2009-05-15 5 views
6

Tengo clase A, que expone un evento. un objeto de clase B suscrito al evento. Ambas instancias en realidad también tienen una referencia regular entre sí. Me gustaría serializar A, y tener ambos objetos transferidos a través del cable, para reconstruirlos en el otro extremo. Esto funciona bien, excepto que la suscripción al evento no se conserva.Serializar eventos

Creo que tengo que implementar mi propio constructor de serialización para 'ser notificado' cuando mis objetos se deserializan, por lo que puede volver a suscribirse al evento.

Sin embargo, parece que eso significa que tengo que implementar completamente la seialización mediante la implementación de ISerializable. Ahora confío en los atributos BinaryFormatter y [Serializable], y realmente me gusta mucho.

¿Alguien sabe una forma de que me notifiquen sobre la deserialización, al tiempo que sigo siendo capaz de utilizar el sistema de serialización incorporado para serializar automáticamente & deserializar mi gráfico de objetos algo complejo para mí?

Gracias, Lucas

Respuesta

8

El mecanismo de serialización estándar (no XML) utiliza atributos especiales para marcar métodos para ser utilizados como devoluciones de llamada durante (de) serialización. OnDeserializedAttribute es lo que estás buscando. Una solución similar es la implementación de la interfaz IDeserializationCallback.

+0

Gran respuesta. Miré mi código durante 2 horas tratando de descubrir por qué mi evento siempre era nulo, a pesar de que el código de suscripción funcionaba bien. –