.NET Deserialisation avec OnDeserializing et OnDeserialized

J'utilise une classe simple qui est sérialisable. Il a un constructeur pour la désérialisation:

protected MyClass(SerializationInfo info, StreamingContext context)

et un GetObjectData méthode de sérialisation. Il fonctionne très bien.

Maintenant, j'ai ajouté deux méthodes de suivi de la deserialisation:

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

et je me demandais dans quel ordre ces méthodes sont être appelé. Maintenant, les deux méthodes appelée avant que le constructeur est appelé. Comment est-ce possible, et pourquoi n'est-elle pas la "OnDeserialized" méthode appelée ainsi d'après le (la désérialisation-) constructeur a été appelé? Et comment un (non statique) de la méthode appelée avant tout constructeur a été exécuté? (Je suis à l'aide d'un BinaryFormatter)

OriginalL'auteur Gerhard | 2013-08-22