1

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

new Exception("Hello").ToJson()

结果是:

"\"Hello\""

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

编辑

澄清一下,以上只是重现行为所需的最少代码。当捕获到异常时调用实际的代码,同样的事情也会发生。

4

1 回答 1

2

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

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

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

于 2013-08-13T16:13:10.450 回答