Visual Studio如何从调试器序列化对象

xvo*_*rsx 75 c# visual-studio-2012

我正在尝试调查崩溃转储中的错误(因此我无法更改代码).我有一个非常复杂的对象(序列化表示中有数千行),并且它的状态不一致.要调查其状态,Visual Studio调试器视图是无用的.但该对象有一个数据契约.我想序列化它,然后使用我喜欢的文本编辑器浏览对象.是否可以从调试器中执行此操作?

mci*_*321 125

With any luck you have Json.Net in you appdomain already. In which case pop this into your Immediate window:

Newtonsoft.Json.JsonConvert.SerializeObject(someVariable)

  • 希望我能再次投票,特别是与其他答案相比.(抱歉,我的职业生涯中不需要看到另一行XML.) (12认同)
  • 这是一个很好的答案。我用它时只做了一点小小的改变,就省去了去美容院的麻烦。Newtonsoft.Json.JsonConvert.SerializeObject(someVariable,Newtonsoft.Json.Formatting.Indented) (4认同)

小智 71

前段时间我写了一个单行程序,将一个对象序列化到磁盘上的文件中.将其复制/粘贴到Intermediate窗口,然后obj用您的对象替换(引用两次).它会将text.xml文件保存到c:\ temp,根据自己的喜好进行更改.

(new System.Xml.Serialization.XmlSerializer(obj.GetType())).Serialize(new System.IO.StreamWriter(@"c:\temp\text.xml"), obj)
Run Code Online (Sandbox Code Playgroud)

不要指望任何魔法,如果对象无法序列化,它将通过异常.

  • 这对我来说很有用.upvoted, (2认同)

Oma*_*abd 32

这是一个Visual Studio扩展,它可以让你做到这一点:

https://visualstudiogallery.msdn.microsoft.com/c6a21c68-f815-4895-999f-cd0885d8774f

您可以输出到JSON,XML或C#

  • [Visual Studio 2019 版本](https://github.com/OmarElabd/ObjectExporter/issues/84#issuecomment-540138520) (5认同)
  • 该链接似乎已被破坏,但[这里](https://github.com/OmarElabd/ObjectExporter)是github项目,如果您在"扩展和更新..."中搜索"对象导出器",您可以找到它. "Visual Studio中的对话框.很棒的扩展顺便说一句! (4认同)
  • 谢谢@Omar这个想法很完美.但是在某些情况下需要很长时间并冻结 (2认同)

Chr*_*ock 17

在 Visual Studio 的“立即”窗口中使用此命令,替换c:\directory\file.json为要写入 JSON 的文件的完整路径以及myObject要序列化的变量:

System.IO.File.WriteAllText(@"c:\directory\file.json", Newtonsoft.Json.JsonConvert.SerializeObject(myObject))
Run Code Online (Sandbox Code Playgroud)

.Net Core 3及以上版本的更新版本:

System.IO.File.WriteAllText(@"c:\directory\file.json", System.Text.Json.JsonSerializer.Serialize(myObject))
Run Code Online (Sandbox Code Playgroud)


Łuk*_*iec 7

由于.NET Core 3.0 您可以使用System.Text.Json

System.Text.Json.JsonSerializer.Serialize(obj)
Run Code Online (Sandbox Code Playgroud)


Yev*_*kes 6

Object Dumper是Visual StudioVisual Studio Code的免费开源扩展。

转储为”命令可通过“代码”“立即”窗口中的上下文菜单使用。

它将对象导出到:

  • C#对象初始化代码,
  • JSON,
  • Visual Basic 对象初始化代码,
  • XML,
  • YAML。

我相信与Diff 工具结合使用会有所帮助。

我是这个工具的作者