【问题标题】:On exception - convert object to string?异常 - 将对象转换为字符串?
【发布时间】:2013-09-03 17:16:40
【问题描述】:

当我的 VB.Net 应用程序崩溃时,我尝试收集尽可能多的信息。

我有一些对象需要转换为字符串,所以我可以通过电子邮件将对象值发送给我。

如何将对象转换为字符串 - 即使它们不可序列化?

在我的测试中,如果我尝试序列化我的测试对象,我会得到一个错误,因为它继承自 IDictionary,所以它不能被序列化。但我可以将它添加到“监视”窗口,仍然可以看到它的所有属性。那么一定有办法将不可序列化的对象转成字符串?

【问题讨论】:

  • 那么,您基本上是在寻求一种序列化对象的方法吗?例如,您为什么不尝试将其序列化为 Json。我确信它可以处理 IDictionary 类型。试试看:json.codeplex.com
  • 取决于您对“应用程序崩溃”的理解 - 这里可能是如何记录导致应用程序崩溃的异常(未处理的异常) - (stackoverflow.com/questions/13895929/…) 并使用日志框架(可以配置为通过邮件发送错误,将它们记录到文件系统...)
  • @dandel ...效果很好!谢谢:)
  • @dandel 把它作为答案,我会标记它:)

标签: c# vb.net serialization


【解决方案1】:

我之前有过这样的问题 - Logging instance data

所以你可以使用反射并自己遍历属性,或者你可以采取一些已经写好的东西,例如 ServiceStack 有 Dump 方法: http://www.servicestack.net/mythz_blog/?p=202

顺便说一句,不确定“不可序列化”是什么意思。如果无法使用默认的 .net 类将对象序列化为 xml,这并不意味着无法使用自定义类或其他序列化格式(如 JSON 或二进制)对其进行序列化。

【讨论】:

  • 这看起来不错,但如果我有这样的... Public Function SerializeObject(o As Object) As String ... 那么 o.Dump 失败,在对象中找不到成员 Dump。有什么办法解决这个问题?
  • 你需要安装包nuget.org/packages/ServiceStack.Text并添加使用语句:using ServiceStack.Text;
  • 我这样做了,如果我执行 MyObject.Dump,它可以工作,但是如果我将对象作为参数发送到我上面的函数......调用 SerializeObject(MyObject)......然后我的函数方法... o.Dump ...失败。
【解决方案2】:

你可以使用反射来做到这一点

Reflection (C# Programming Guide)

【讨论】:

  • 不鼓励仅链接的答案。您最好提供一些额外的解释或示例。
【解决方案3】:

那么,您基本上是在寻求一种序列化对象的方法吗?例如,您为什么不尝试将其序列化为 Json。我确信它可以处理 IDictionary 类型。试试看:json.codeplex.com

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    • 1970-01-01
    • 2014-01-14
    • 2011-08-02
    • 2016-06-10
    相关资源
    最近更新 更多