众所周知,异常通常不可序列化,并且在对不同.NET异常进行序列化/反序列化后在各种序列化程序中捕获一些非常奇怪的错误后,我想出了简单的DTO for trasport level:
[DataContract]
public class Error
{
[DataMember]
public string Message {get;set;}
[DataMember]
public string StackTrace {get;set;}
//all Exception fields here
}
我可以成功地将Exception转换为Error类,但如何做到相反?我的意思是,我希望在实际运输之后抛出它,使用有效的远程堆栈跟踪以及运输之前的所有内容...... 一种方法是使用反射,但是,呃,它很糟糕,看起来很不健康。
答案 0 :(得分:2)
我还没有完全理解这样做的要求,但在传输级别的通信中总是提供错误消息/代码传递,例如WCF有fault-contract你可以检查。我在Serializable Exception找到了一个可能适合您需求的答案。它有三种实现方式和良好的代码。