Como dice MSDN here, puede hacerlo. Pero he pasado 2 horas cavando código mscorlib, porque en algunos casos el BinaryFormatter llamó a mi método marcado con OnDeserialized ANTES del constructor de deserialización. Es decir, el orden era¿Se puede usar OnDeserializedAttribute en lugar de la interfaz IDeserializationCallback?
OnDeserializing(StreamingContext context)
OnDeserialized(StreamingContext context)
.ctor(SerializationInfo info, StreamingContext context)
Mientras yo esperaba que fuera
OnDeserializing(StreamingContext context)
.ctor(SerializationInfo info, StreamingContext context)
OnDeserialized(StreamingContext context)
Y el punto final. Cuando implementé la interfaz IDeserializationCallback, su método OnDeserialization se llamó DESPUÉS del constructor, como quería y esperaba.
Intenté reproducir esto en una estructura de clase simple, pero allí todo funcionó bien. En nuestro proyecto, el gráfico de objetos que se serializa es muy complejo, por lo que no sé dónde cavar. Inspeccionar el código de mscorlib con reflector no ayudó mucho; el código de deserialización es demasiado complicado para descubrir de dónde viene el problema.
Entonces, ¿alguien sabe lo que podría estar causando ese problema? Usamos la suposición de que OnDeserialized se llama ANTES del constructor en varios otros lugares, así que ahora tengo miedo de que no sea muy confiable ...
¡Gracias!