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

Hui*_*Hui 54 c# pretty-print

我有一个文本框,我想以人类可读的方式在其中显示一个C#对象,仅用于调试原因.如果可能,我不想使用外部库.我该怎么做呢?

Ric*_*ard 95

如果您使用Json,那么我建议使用Newtonsofts Json库,然后您可以用Json表示法输出整个对象,它将使用间距和换行符对其进行格式化.我们使用它来轻松显示复杂对象以进行调试:

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

这里我还使用了String Enum转换器,以便将Enums显示为字符串表示而不是整数.

该库可通过NuGet以Json.Net或Newtonsoft Json的形式获得

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

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


vt1*_*100 23

如果它仅用于调试目的,请使用DebuggerDisplayAttribute.

使用此属性将更改对象在监视窗口的"值"部分中的外观(或者在调试期间将鼠标悬停在其上)

用法:

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

}
Run Code Online (Sandbox Code Playgroud)


Ili*_*a G 21

将其序列化为JSON.它可以ToString()像其他人建议的那样在方法中完成,但是如果您打算仅使用它进行调试,我认为这不合适.

  • Newtonsoft的`JsonConvert`也可以有格式化选项`Debug.WriteLine(JsonConvert.SerializeObject(myObject,Formatting.Indented))` (5认同)
  • 我实际上比滚动自己的ToString()更喜欢这个想法.JSON序列化将以比XML更"轻"的格式显示每个公共字段及其值,而不触及可能在其他地方使用的ToString.这是一个简单的ToJSON扩展方法:http://weblogs.asp.net/scottgu/archive/2007/10/01/tip-trick-building-a-tojson-extension-method-using-net-3-5.aspx (3认同)

小智 7

这对我来说非常有效:

string SerilizedText = "";
RootClass myclass= new Root RootClass ();
SerilizedText = JsonConvert.SerializeObject(myclass,Newtonsoft.Json.Formatting.Indented) ;
Run Code Online (Sandbox Code Playgroud)


Gus*_*ori 5

一种简单的方法是覆盖该ToString方法。

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