2011-06-10 61 views
39

我有一個文本框,我想以一種人類可讀的方式在其中顯示一個C#對象,僅用於調試原因。如果可能,我不想使用外部庫。我該怎麼做呢?一種漂亮的打印C#對象的方法

+0

你是什麼意思顯示一個C#對象?顯示其全名,屬性或什麼? – 2011-06-10 16:23:34

回答

18

它序列化到JSON。它可以像其他人所建議的那樣在ToString()方法中完成,但我認爲如果您打算僅將其用於調試,那麼這是不合適的。

+3

我實際上喜歡這個想法比自己的ToString()更好。一個JSON序列化會以比XML更「輕」的格式顯示每個公共字段及其值,而不會觸及其他地方可能使用的ToString。以下是一個簡單的ToJSON擴展方法:http://weblogs.asp.net/scottgu/archive/2007/10/01/tip-trick-building-a-tojson-extension-method-using-net-3-5.aspx – KeithS 2011-06-10 16:30:03

+0

一個快速和骯髒的例子在這裏會很有用,特別是因爲這可能是語言的新手最需要的! – 2016-03-04 06:59:18

1

只需在您的類型上覆蓋ToString()並提供您自己的格式化字符串以進行調試顯示。

+0

偉大的思想家都認爲。 – Jay 2011-06-10 16:24:11

0

覆蓋.ToString()方法。

1

我用這個頗有幾分填充列表框與自定義對象:

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

如果只是爲了調試目的,使用DebuggerDisplayAttribute

使用這個屬性將改變物體看起來像在監視窗口中的值部分的內容(或ONT他鼠標懸停在調試過程中)

用法:

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

} 
63

如果您使用JSON然後我會建議使用Newtonsofts Json庫,然後可以使用Json表示法輸出整個對象,並使用間距和換行符對其進行格式化。我們用它來輕鬆地進行調試顯示覆雜的對象:

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

在這裏我也用字符串枚舉轉換器,以顯示枚舉作爲他們的字符串表示,而不是作爲一個整數。

庫可通過的NuGet爲Json.Net或Newtonsoft的Json

或者,你可以在這裏:

http://james.newtonking.com/pages/json-net.aspx

3

我也用的Json一陣子;但現在我創建了一個PrettyPrint-Minimod。你可以通過Nuget添加它(它是一個Sourcecode發行版)。找出Minimod在這裏。

它很好地打印對象圖,並具有一些枚舉和字典的魔力。它也試圖找出適當的換行符。

我會盡快博客 - 不過先走一步,試試吧:-)

1
  1. 安裝,包裝ServiceStack.Text
  2. obj.Dump();

如果你不這樣做想要使用外部庫,編寫自己的Dump()擴展方法。

+0

obj.ToDump()讓VS找到正確的包來幫助你使用include – BozoJoe 2016-06-24 00:14:24