例外をシリアライズする方法

.NET Remotingで例外も通信してくれないかと調べていたら、例外をシリアル化・逆シリアル化できるようにすればいいことがわかった。

http://msdn.microsoft.com/ja-jp/library/dd296859.aspx

↑を超参考に例外を以下のように定義する。

    [Serializable()]
    public class MyException : ApplicationException
    {
        //普通に使うコンストラクタ
        public MyException() { }

        //逆シリアル化コンストラクタ
        public MyException(SerializationInfo info, StreamingContext context) :
            base(info, context) { }
    }

ポイントは、

  1. Serializable属性をつける。
  2. 逆シリアル化可能にするためのコンストラクタを定義する。
  3. 普通に例外を発生させるときのためのコンストラクタも定義する。

例外にデータを持たせたい時には、もうひと工夫必要だけど、上記のページを見れば書いてあるので省略。