我有一个文本框,出于调试的原因,我想以人类可读的方式在其中显示一个 C # 对象。如果可能的话,我不想使用外部库。我该怎么做?
只需覆盖类型上的 ToString()并提供自己的格式化字符串以便调试显示。
ToString()
重写 .ToString()方法。
.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 添加它(它是一个源代码发行版)。找出什么是 简约在这里。
它可以很好地打印对象图,并且对可枚举数据和字典有一些魔力。它还试图找出适当的换行符。
我很快就会在博客上谈论这个问题,不过你可以试试看: -)
obj.Dump();
如果不想使用外部库,可以编写自己的 Dump ()扩展方法。
这对我来说非常有效:
string SerilizedText = ""; RootClass myclass= new Root RootClass (); SerilizedText = JsonConvert.SerializeObject(myclass,Newtonsoft.Json.Formatting.Indented) ;