C#

[C#] イベントのシリアライズ

シリアライズ対象のクラスにイベントが含まれている場合、シリアライズに失敗することがあります。

以下のようにイベント登録していると、イベント登録したクラス側のシリアライズ処理も走ってしまいます。
そして、そのクラスがシリアライズ可能になっていないと「System.Runtime.Serialization.SerializationException」例外が吐き出されます。

public class TestMain
{
    Hoge hoge;

    TestMain()
    {
        hoge = new Hoge();
        hoge.Completed += hoge_Completed;
        ...    // ココでhogeをシリアライズ
    }
}


public class Hoge
{
    public event EventHandler Completed;

    ...
}

 
イベント登録したクラス側を含めてシリアライズしたい場面はそうそう無いと思われるので、イベントはシリアライズ対象から外しておいた方が良さそうです。

イベントに対して属性「field: NonSerialized」を指定することで、シリアライズ対象から除外されます。

public class Hoge
{
    [field: NonSerialized]
    public event EventHandler Completed;

    ...
}

 
 

-C#
-,