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