我正在寻找一个错误,如果我可以将我的本地窗口对象的内容转储到一个文件中,这样我就可以在 Notepad++ 中将它与另一个正常工作的对象记录进行比较,这将非常有帮助。问题是这样的:我们不确定代码中是否存在错误或记录中是否存在差异。
有没有办法将对象/变量保存到磁盘?
我找到了这个扩展,但遗憾的是它只适用于 VS 2010,而我有 2012。
我正在寻找一个错误,如果我可以将我的本地窗口对象的内容转储到一个文件中,这样我就可以在 Notepad++ 中将它与另一个正常工作的对象记录进行比较,这将非常有帮助。问题是这样的:我们不确定代码中是否存在错误或记录中是否存在差异。
有没有办法将对象/变量保存到磁盘?
我找到了这个扩展,但遗憾的是它只适用于 VS 2010,而我有 2012。
您可以使用ObjectDumper扩展。它也可用作 NuGet 包。
我参加聚会有点晚了,但我创建了一个名为 Object Exporter 的 Visual Studio 扩展,它完全符合您的要求。它会将调试窗口(目前仅限于本地窗口)中的任何对象导出为 JSON、XML 或 CSharp 对象初始化代码。
这是扩展:Visual Studio Marketplace > 对象资源管理器
这是随附的博客文章:从 Visual Studio 调试器导出对象
作者可以在 http://barad-dur.nl/net/export-locals/下载 Export Locals 扩展的源代码,因此您应该能够轻松地将其转换为 VS2012。
我在 OzCode 工作。它是 Visual Studio 的调试扩展,我们一直在开发将实例导出为 XML、json 或 C# 代码以供未来版本使用的功能。您可以从Visual Studio 的市场
下载抢先体验预览版。这是一个商业级解决方案,可以快速导出大量数据。
我建议您尝试一下 - 一旦您使用Export安装 OzCode ,只需打开 DataTip 窗口并选择“Export”即可。
我用 Log4Net 和 ObjectDumper 做了一些实验来转储对象。
查看我的博文:使用 Log4Net 记录完整对象
基本上你创建自己的 IObjectRenderer,配置它,然后你可以简单地 log.Debug(yourObject)
public class Log4NetObjectLogger : IObjectRenderer
{
public void RenderObject(RendererMap rendererMap, object obj, TextWriter writer)
{
var ex = obj as Exception;
//if its not an exception, dump it. If it's an exception, log extended details.
if (ex == null)
{
//by default log up to 10 levels deep.
ObjectDumper.Write(obj,10,writer);
}
else
{
while (ex != null)
{
RenderException(ex, writer);
ex = ex.InnerException;
}
}
}
private void RenderException(Exception ex, TextWriter writer)
{
writer.WriteLine(string.Format("Type: {0}", ex.GetType().FullName));
writer.WriteLine(string.Format("Message: {0}", ex.Message));
writer.WriteLine(string.Format("Source: {0}", ex.Source));
writer.WriteLine(string.Format("TargetSite: {0}", ex.TargetSite));
RenderExceptionData(ex, writer);
writer.WriteLine(string.Format("StackTrace: {0}", ex.StackTrace));
}
private void RenderExceptionData(Exception ex, TextWriter writer)
{
foreach (DictionaryEntry entry in ex.Data)
{
writer.WriteLine(string.Format("{0}: {1}", entry.Key, entry.Value));
}
}
}
尝试打开即时窗口并输入对象名称。它将打印出简单的属性及其值。但是,它不能很好地处理作为对象的属性。
或者,您可以使用 JSON 序列化程序对其进行序列化并在调试控制台中打印出来。