一个漂亮的打印C#对象的方法

我有一个文本框,我想以一种人类可读的方式显示一个C#对象,只是为了debugging的原因。 如果可能,我不想使用外部库。 我该怎么做呢?

将其序列化为JSON。 它可以像ToString()方法一样完成,但我不认为这是适当的,如果你打算只用于debugging。

如果您使用Json,那么我会build议使用Newtonsofts Json库,然后您可以输出Json符号中的整个对象,它将使用间距和换行符进行格式化。 我们已经使用它来轻松显示复杂对象,以便进行debugging:

 var jsonString = JsonConvert.SerializeObject( property, Formatting.Indented, new JsonConverter[] {new StringEnumConverter()}); 

在这里我也使用了string枚举转换器来显示枚举作为它们的string表示而不是一个整数。

该库可通过NuGet作为Json.Net或Newtonsoft Json

或者你可以在这里得到它:

http://james.newtonking.com/pages/json-net.aspx

如果仅用于debugging目的,请使用DebuggerDisplayAttribute 。

使用这个属性将改变观察窗口的Value部分中的对象的样子(或者在debugging期间将鼠标hover在上面)

用法:

 [DebuggerDisplay("Name = {FirstName} {LastName}")] public class Person { public string FirstName { get; set; } public string LastName { get; set; } } 

一个简单而简单的方法是覆盖ToString方法。

这里有一个链接: 如何覆盖ToString

我也用了Json一段时间; 但是现在我创build了一个PrettyPrint-Minimod 。 你可以通过Nuget添加它(它是一个Sourcecode发行版)。 找出一个Minimod在这里。

它很好地打印对象图,并具有一些枚举和字典的魔力。 它也试图找出适当的换行符。

我会很快写博客 – 但是继续尝试吧:-)

简单地覆盖你的types的ToString() ,并提供你自己的,格式化的string进行debugging显示。

我用这个很多来填充自定义对象的列表框:

 public override string ToString() { return String.Format("{0}:{1}:{2}", Property1, Property2, Property3); } 
  1. 安装包ServiceStack.Text
  2. obj.Dump();

如果您不想使用外部库,请编写您自己的Dump()扩展方法。

覆盖.ToString()方法。