2009-08-20 1048 views
11

Por lo que yo entiendo, la interfaz IDeserializationCallback y el evento OnDeserialized se pueden usar cuando un objeto necesita realizar alguna tarea después de ser deserializado.IDeserializationCallback vs OnDeserializedAttribute

IDeserializationCallback:

[Serializable] 
public class Foo : IDeserializationCallback 
{ 
    public void OnDeserialization(object sender) 
    { 
     // initialize unserialized fields etc. 
    } 
} 

caso OnDeserialized:

[Serializable] 
public class Foo 
{ 
    [OnDeserialized] 
    public void OnDeserialized(StreamingContext context) 
    { 
     // initialize unserialized fields etc. 
    } 
} 

¿Hay ventajas/desventajas o escenarios en los que elegiría uno sobre el otro específicas?

Respuesta

2

Me he preguntado lo mismo. En cuanto a pros y contras, solo puedo razonar que la interfaz tiene la ventaja de que te obliga a implementar la firma del método correcta, ya que la versión del atributo te permitirá compilar tu clase independientemente de cómo se vea la firma de tu método. .

+0

Buen punto. Esa es una ventaja bastante buena de usar la interfaz IDeserializationCallback. –

+2

En realidad, esta no es la respuesta correcta: mira la respuesta de Val y sigue el enlace allí. –

5
puesto de

Darren Headrick enlace desde arriba (por completo): "Se ejecuta cuando todo el gráfico de objetos ha sido deserializado"

DeserializationCallback.OnDeserialization (link).

El evento OnDeserialized sin embargo "Use OnDeserializedAttribute cuando necesite corregir valores en un objeto deserializado después de que se haya deserializado y antes de que se devuelva el gráfico. Este atributo se puede usar en lugar de la interfaz IDeserializationCallback". (link).

Dado que el atributo OnDeserialized se puede utilizar para modificar el gráfico del objeto, se llama antes de OnDeserialization (lo que significa que el gráfico del objeto está en su estado final).

Cuestiones relacionadas