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

时间:2011-06-10 16:21:19

标签: c# pretty-print

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

10 个答案:

答案 0 :(得分:85)

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

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

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

该库可通过NuGet以Json.Net或Newtonsoft Json

获得

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

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

答案 1 :(得分:20)

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

答案 2 :(得分:20)

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

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

用法:

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

}

答案 3 :(得分:5)

我还使用了Json一段时间;但现在我创建了一个PrettyPrint-Minimod。您可以通过Nuget添加它(它是一个源代码分发)。找出Minimod在这里的内容。

它很好地打印了对象图,并且对于可枚举和字典有一些魔力。它还试图找出正确的换行符。

我很快就会写博客 - 但请继续尝试: - )

答案 4 :(得分:4)

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

这是一个链接:How to override ToString

答案 5 :(得分:2)

  1. Install-Package ServiceStack.Text
  2. obj.Dump();
  3. 如果您不想使用外部库,请编写自己的Dump()扩展方法。

答案 6 :(得分:1)

只需覆盖您的类型上的ToString(),并提供您自己的格式化字符串以供调试显示。

答案 7 :(得分:1)

我使用这一点来填充带有自定义对象的列表框:

public override string ToString()
{
    return String.Format("{0}:{1}:{2}", Property1, Property2, Property3);
}

答案 8 :(得分:1)

这对我非常有用:

string SerilizedText = "";
RootClass myclass= new Root RootClass ();
SerilizedText = JsonConvert.SerializeObject(myclass,Formatting.Indented) ;

答案 9 :(得分:0)

覆盖.ToString()方法。