【发布时间】:2011-09-12 15:33:23
【问题描述】:
我有一个文本框,我想以人类可读的方式在其中显示一个 C# 对象,只是出于调试原因。如果可能的话,我不想使用外部库。我该怎么做?
【问题讨论】:
-
显示 C# 对象是什么意思?显示它的全名、它的属性还是什么?
标签: c# pretty-print
我有一个文本框,我想以人类可读的方式在其中显示一个 C# 对象,只是出于调试原因。如果可能的话,我不想使用外部库。我该怎么做?
【问题讨论】:
标签: c# pretty-print
这对我来说非常有用:
string SerilizedText = "";
RootClass myclass= new Root RootClass ();
SerilizedText = JsonConvert.SerializeObject(myclass,Newtonsoft.Json.Formatting.Indented) ;
【讨论】:
如果您使用 Json,那么我建议您使用 Newtonsofts Json 库,然后您可以以 Json 表示法输出整个对象,它会使用间距和换行符对其进行格式化。我们已经使用它来轻松地显示复杂对象以进行调试:
var jsonString = JsonConvert.SerializeObject(
complexObject, Formatting.Indented,
new JsonConverter[] {new StringEnumConverter()});
这里我还使用了字符串枚举转换器,以便将枚举显示为其字符串表示形式,而不是整数。
该库可通过 NuGet 作为 Json.Net 或 Newtonsoft Json 获得
或者你可以在这里得到它:
【讨论】:
property 有点误导。或者我错过了什么?
一个简单的方法是覆盖ToString 方法。
这是一个链接:How to override ToString
【讨论】:
覆盖.ToString() 方法。
【讨论】:
obj.Dump();如果您不想使用外部库,请编写自己的 Dump() 扩展方法。
【讨论】:
我也用过一段时间的 Json;但现在我创建了一个PrettyPrint-Minimod。您可以通过 Nuget 添加它(它是一个源代码发行版)。在这里找出Minimod 是什么。
它可以很好地打印对象图,并且对枚举和字典有一些魔力。它还试图找出正确的换行符。
我很快就会在博客上介绍它 - 但请继续尝试 :-)
【讨论】:
如果只是出于调试目的,请使用DebuggerDisplayAttribute。
使用此属性将更改对象在监视窗口的值部分中的外观(或在调试期间鼠标悬停时)
用法:
[DebuggerDisplay("Name = {FirstName} {LastName}")]
public class Person {
public string FirstName { get; set; }
public string LastName { get; set; }
}
【讨论】:
我经常使用它来用自定义对象填充列表框:
public override string ToString()
{
return String.Format("{0}:{1}:{2}", Property1, Property2, Property3);
}
【讨论】:
将其序列化为 JSON。它可以像其他人建议的那样在ToString() 方法中完成,但如果您仅将其用于调试,我认为这不合适。
【讨论】:
JsonConvert 也有格式化选项Debug.WriteLine(JsonConvert.SerializeObject(myObject, Formatting.Indented))
只需在您的类型上覆盖 ToString() 并提供您自己的格式化字符串以进行调试显示。
【讨论】: