.NET-Deserialisierung mit OnDeserializing und OnDeserialized

Ich benutze eine einfache Klasse, die serialisierbar ist. Es hat einen Konstruktor für die Deserialisierung:

protected MyClass(SerializationInfo info, StreamingContext context)

und eine GetObjectData-Methode zur Serialisierung. Es funktioniert gut.

Jetzt habe ich zwei Methoden hinzugefügt, um die Deserialisierung zu überwachen:

        [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());
    }

und fragte mich, in welcher Reihenfolge diese Methoden aufgerufen werden. Jetzt werden beide Methoden aufgerufen, bevor der Konstruktor aufgerufen wird. Wie ist das möglich und warum wird die Methode "OnDeserialized" nicht aufgerufen, nachdem der (Deserialisierungs-) Konstruktor aufgerufen wurde? Und wie kann eine (nicht statische) Methode aufgerufen werden, bevor ein Konstruktor ausgeführt wurde? (Ich benutze einen BinaryFormatter)