5

我正在寻找一个错误,如果我可以将我的本地窗口对象的内容转储到一个文件中,这样我就可以在 Notepad++ 中将它与另一个正常工作的对象记录进行比较,这将非常有帮助。问题是这样的:我们不确定代码中是否存在错误或记录中是否存在差异。

有没有办法将对象/变量保存到磁盘?

我找到了这个扩展,但遗憾的是它只适用于 VS 2010,而我有 2012。

4

6 回答 6

5

您可以使用ObjectDumper扩展。它也可用作 NuGet 包。

于 2013-04-16T20:35:06.667 回答
2

我参加聚会有点晚了,但我创建了一个名为 Object Exporter 的 Visual Studio 扩展,它完全符合您的要求。它会将调试窗口(目前仅限于本地窗口)中的任何对象导出为 JSON、XML 或 CSharp 对象初始化代码。

这是扩展:Visual Studio Marketplace > 对象资源管理器

这是随附的博客文章:从 Visual Studio 调试器导出对象

于 2015-02-21T07:18:43.757 回答
1

作者可以在 http://barad-dur.nl/net/export-locals/下载 Export Locals 扩展的源代码,因此您应该能够轻松地将其转换为 VS2012。

于 2013-04-16T23:00:47.713 回答
1

我在 OzCode 工作。它是 Visual Studio 的调试扩展,我们一直在开发将实例导出为 XML、json 或 C# 代码以供未来版本使用的功能。您可以从Visual Studio 的市场
下载抢先体验预览版。这是一个商业级解决方案,可以快速导出大量数据。

选择电子报告格式

我建议您尝试一下 - 一旦您使用Export安装 OzCode ,只需打开 DataTip 窗口并选择“Export”即可。

导出图像

于 2016-12-19T15:10:33.543 回答
0

我用 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));
            }
        }
    }


于 2013-04-16T23:04:18.367 回答
0

尝试打开即时窗口并输入对象名称。它将打印出简单的属性及其值。但是,它不能很好地处理作为对象的属性。

或者,您可以使用 JSON 序列化程序对其进行序列化并在调试控制台中打印出来。

于 2013-04-16T20:36:40.467 回答