使用ServiceStack序列化异常时出现问题

时间:2013-08-12 15:37:39

标签: c# json exception exception-handling servicestack

当我的框架中抛出异常并生成日志条目时,我想序列化异常并将其抛入数据库。 ServiceStack.Text.ToJson<>适用于我的所有POCO,但在以下代码中:

new Exception("Hello").ToJson()

结果:

"\"Hello\""

......而不是完整的例外。我有什么明显的遗失吗?

修改

只是为了澄清,上面只是重现行为所需的最小代码。捕获异常时会调用实际代码,同样的事情也会发生。

1 个答案:

答案 0 :(得分:2)

ServiceStack可能有很好的理由为异常执行此操作。我写了一个快速的序列化程序,从深层意义上迭代了对象的公共可读属性 - 我相信由于所有程序集,声明类型,方法类型的东西,我在Exception上得到了堆栈溢出。我认为这是一种溢出,因为测试程序吹了一个垫片。

这种观察是否正确 - 很快就会发现人们不希望在数据库中存储完整的序列化异常。有用的信息(异常名称,内部异常,堆栈跟踪等)确实很有用 - 但是如果您尝试将异常序列化为整体,那么您根本不需要这么多无关的东西也是不可取的。

我怀疑这就是为什么ServiceStack使用ResponseStatus对象保留一些相关细节的原因。我选择做类似的事情,它保持堆栈跟踪和内部异常 - 但是将其拉入更简单的POCO而没有其他任何东西。