Десериализация .NET с OnDeserializing и OnDeserialized
Я использую простой класс, который сериализуем. У него есть конструктор для десериализации:
protected MyClass(SerializationInfo info, StreamingContext context)
и метод GetObjectData для сериализации. Работает нормально.
Теперь я добавил два метода для мониторинга десериализации:
[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());
}
и задавался вопросом, в каком порядке называются эти методы. Теперь оба метода вызываются до вызова конструктора. Как это возможно, и почему метод OnDeserialized не вызывается после вызова конструктора (deserialization-)? И как (нестатический) метод может быть вызван перед выполнением любого конструктора? (Я использую BinaryFormatter)