IDeserializationCallback vs OnDeserializedAttribute

Según tengo entendido, tanto la interfaz IDeserializationCallback como el evento OnDeserialialized pueden usarse cuando un objeto necesita realizar alguna tarea después de ser deserializado.

IDeserializationCallback:

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

Evento OnDeserializado:

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

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