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

本文关键字:问题 异常 ServiceStack 序列化 使用 | 更新日期: 2023-09-27 18:27:17

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

new Exception("Hello").ToJson()

结果:

"'"Hello'""

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

编辑

为了澄清,以上只是再现行为所需的最小代码。当捕捉到异常时,实际的代码会被调用,同样的事情也会发生。

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

ServiceStack对异常执行此操作可能有充分的理由。我写了一个快速序列化程序,从深层意义上讲,它遍历对象的公共、可读属性。我相信,由于所有Assembly、声明类型和方法类型的东西,我在Exception上得到了堆栈溢出。我认为这是某种溢出,因为测试程序吹坏了垫圈。

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

我怀疑这就是ServiceStack使用ResponseStatus对象的原因,它保留了一些相关的细节。我选择做类似的事情,保留堆栈跟踪和内部异常,但将其引入到一个简单得多的POCO中,而不需要其他一切。