Deserialización de .NET con OnDeserializing y OnDeserialized

Yo uso una clase simple que es serializable. Cuenta con un constructor para la deserialización:

protected MyClass(SerializationInfo info, StreamingContext context)

y un método GetObjectData para la serialización. Funciona bien.

Ahora agregué dos métodos para monitorear la deserialización:

        [OnDeserializing()]
    internal void OnDeserializingMethod(StreamingContext context)
    {
        System.Diagnostics.Trace.WriteLine("OnDeserializingMethod: " + this.GetType().ToString());
    }

    [OnDeserialized()]
    internal void OnDeserializedMethod(StreamingContext context)
    {
        System.Diagnostics.Trace.WriteLine("OnDeserializedMethod: " + this.GetType().ToString());
    }

y me preguntaba en qué orden se llaman estos métodos. Ahora ambos métodos son llamados antes que el constructor sea llamado. ¿Cómo es eso posible, y por qué no se llama al método "OnDeserialized" después de que se haya llamado al constructor (deserialización)? ¿Y cómo se puede llamar a un método (no estático) antes de ejecutar cualquier constructor? (Estoy usando un BinaryFormatter)

Respuestas a la pregunta(3)

Su respuesta a la pregunta