让你的异常类的序列化!
老实说,我生病和调试怪异SerializationExceptions的,因为一个写得不好的异常类的一个实例跨越AppDomain边界累。 我能理解它,如果它是一个例外真的是不可能的序列化的类,但现实却是,这主要是由开发的部分lazyness引起的。
提示#1:异常是不是由默认的序列化。 如果您创建一个自定义异常类,它是您 responsability,以确保它是可序列化的。
提示#2:标记[Serializable的]的异常类是不够的。 System.Exception的实现ISerializable的,所以它迫使你这样做。
在这里,你应该写一个异常类时,请记住:
- [Serializable]属性标记的异常的类型。
- 添加一个空的保护序列化的构造简单代表的基类:
保护MyException(SerializationInfo中信息的StreamingContext ctxt):基地(详细信息,ctxt)
对于大多数的异常类,这将是不够的,因为大多数不实际添加新的属性和单纯依靠消息。
但是,如果您的自定义异常类自定义属性,那么它必须重写ISerializable.GetObjectData()(不要忘了调用基地之一),你必须解开这些属性在您的序列化构造。