我有一个文本框,我想以人类可读的方式在其中显示一个C#对象,仅用于调试原因。如果可能,我不想使用外部库。我该怎么做?
答案 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
获得或者你可以在这里得到它:
答案 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)
obj.Dump();
如果您不想使用外部库,请编写自己的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()
方法。