我有一个文本框,想以可读的方式在其中显示一个C#对象,仅出于调试目的。如果可能的话,我不想使用外部库。我该怎么做?
我有一个文本框,想以可读的方式在其中显示一个C#对象,仅出于调试目的。如果可能的话,我不想使用外部库。我该怎么做?
var jsonString = JsonConvert.SerializeObject(
complexObject, Formatting.Indented,
new JsonConverter[] {new StringEnumConverter()});
我还使用了字符串枚举转换器,以便将枚举显示为其字符串表示形式,而不是整数。
该库可通过NuGet作为Json.Net或Newtonsoft Json获得。
或者你可以在这里获取:
如果只是为了调试目的,可以使用DebuggerDisplayAttribute。
使用此属性将更改对象在监视窗口的Value部分(或在调试期间鼠标悬停)中的外观。
用法:
[DebuggerDisplay("Name = {FirstName} {LastName}")]
public class Person {
public string FirstName { get; set; }
public string LastName { get; set; }
}
将其序列化为JSON。可以在ToString()
方法中完成,就像其他人建议的那样,但我认为如果只用于调试,那么这样做不太合适。
JsonConvert
еЏЇд»ҐжЏђдѕ›ж јејЏеЊ–йЂ‰йЎ№гЂ‚
Debug.WriteLine(JsonConvert.SerializeObject(myObject, Formatting.Indented))
可以实现对myObjectиї›иЎЊж јејЏеЊ–иѕ“е‡єгЂ‚ - jreancsu这对我非常有效:
string SerilizedText = "";
RootClass myclass= new Root RootClass ();
SerilizedText = JsonConvert.SerializeObject(myclass,Newtonsoft.Json.Formatting.Indented) ;
它可以很好地打印对象图,对于可枚举和字典类型也有一些特殊处理。它还会尝试找出正确的换行位置。
我很快就会写关于它的博客 - 但你可以先试用一下 :-)
只需在您的类型上覆盖ToString()
方法并提供自己格式化的字符串以进行调试显示。
obj.Dump();
如果您不想使用外部库,请编写自己的Dump()扩展方法。
我经常用这个方法来使用自定义对象填充列表框:
public override string ToString()
{
return String.Format("{0}:{1}:{2}", Property1, Property2, Property3);
}
重写.ToString()
方法。