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

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

75316 次浏览

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

重写 .ToString()方法。

一种简单的方法是重写 ToString方法。

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

将其序列化为 JSON。它可以像其他人建议的那样在 ToString()方法中完成,但是我认为如果您只是为了调试而使用它的话,这样做是不合适的。

我经常使用这种方法来用自定义对象填充列表框:

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

如果只是为了调试目的,请使用 调试器显示属性

使用此属性将改变对象在监视窗口的 Value 部分中的外观(或者在调试期间不要鼠标移动)

用途:

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


}

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

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

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

该库可以通过 NuGet 的 Json.Net 或 NewtonsoftJson 获得

或者你可以在这里得到:

Https://www.newtonsoft.com/json

我也使用了 Json 一段时间,但是现在我创建了一个 PrettyPrint-Miniod。您可以通过 Nuget 添加它(它是一个源代码发行版)。找出什么是 简约在这里。

它可以很好地打印对象图,并且对可枚举数据和字典有一些魔力。它还试图找出适当的换行符。

我很快就会在博客上谈论这个问题,不过你可以试试看: -)

  1. 安装-包 ServiceStack.Text
  2. obj.Dump();

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

这对我来说非常有效:

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