当我的框架中抛出异常并生成日志条目时,我想序列化异常并将其抛入数据库。 ServiceStack.Text.ToJson<>
适用于我的所有POCO,但在以下代码中:
new Exception("Hello").ToJson()
结果:
"\"Hello\""
......而不是完整的例外。我有什么明显的遗失吗?
修改
只是为了澄清,上面只是重现行为所需的最小代码。捕获异常时会调用实际代码,同样的事情也会发生。
答案 0 :(得分:2)
ServiceStack可能有很好的理由为异常执行此操作。我写了一个快速的序列化程序,从深层意义上迭代了对象的公共可读属性 - 我相信由于所有程序集,声明类型,方法类型的东西,我在Exception
上得到了堆栈溢出。我认为这是一种溢出,因为测试程序吹了一个垫片。
这种观察是否正确 - 很快就会发现人们不希望在数据库中存储完整的序列化异常。有用的信息(异常名称,内部异常,堆栈跟踪等)确实很有用 - 但是如果您尝试将异常序列化为整体,那么您根本不需要这么多无关的东西也是不可取的。
我怀疑这就是为什么ServiceStack使用ResponseStatus
对象保留一些相关细节的原因。我选择做类似的事情,它保持堆栈跟踪和内部异常 - 但是将其拉入更简单的POCO而没有其他任何东西。