23

シリアル化可能な単純なクラスを使用します。逆シリアル化のためのコンストラクターがあります。

protected MyClass(SerializationInfo info, StreamingContext context)

シリアル化のための GetObjectData メソッド。それは正常に動作します。

ここで、逆シリアル化を監視する 2 つのメソッドを追加しました。

        [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" メソッドが呼び出されないのはなぜですか? また、コンストラクターが実行される前に (非静的) メソッドを呼び出すにはどうすればよいでしょうか? (BinaryFormatter を使用しています)

4

3 に答える 3