IDeserializationCallback vs OnDeserializedAttribute

Tanto quanto eu entendo, a interface IDeserializationCallback eo evento OnDeserialized podem ser usados ​​quando um objeto precisa executar alguma tarefa após ser desserializado.

IDeserializationCallback:

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

Evento OnDeserialized:

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

Há algum prós / contras ou cenários específicos em que você escolheria um sobre o outro?

questionAnswers(4)

yourAnswerToTheQuestion