2

例外から継承された以下のクラスがプライベートフィールドをシリアル化しない理由を誰かに説明してもらえますか?

例外から派生する場合、オブジェクトを手動でシリアル化する必要がありますか?

[Serializable]
public class Test : Exception
{
  private int _errNo = 0;
  private string _msg = String.Empty;

  public int ErrNo
  {
    get { return _errNo; }
  }

  public string Msg
  {
    get { return _msg; }
  }

  public Test(int err, string msg)
  {
    _errNo = err;
    _msg = msg;
  }

  protected Test(System.Runtime.Serialization.SerializationInfo info,
    System.Runtime.Serialization.StreamingContext kontekst)
    : base(info, kontekst)
  {
  }
}
4

1 に答える 1

3

Exceptionクラスは を実装します。ISerializableこれにより、Exceptionシリアライズ方法をオーバーライドできます。ExceptionGetObjectData実装では、リフレクションを使用してシリアル化するフィールドを決定しないため、それをオーバーライドして、新しいフィールドを自分で明示的にリストする必要があります。次に、コンストラクターでこれらのフィールドを復元する必要もあります。

于 2013-06-06T12:15:22.783 に答える