一个漂亮的打印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
或者你可以在这里得到它:
如果仅用于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); }
- 安装包ServiceStack.Text
-
obj.Dump();
如果您不想使用外部库,请编写您自己的Dump()扩展方法。
覆盖.ToString()
方法。