web-dev-qa-db-ja.com

C#オブジェクトをきれいに印刷する方法

テキストボックスがあり、デバッグのためだけに、人間が読める方法でC#オブジェクトを表示したい。可能であれば、外部ライブラリを使用したくありません。どうすればいいですか?

51
Hui

JSONにシリアル化します。他の人が提案したようにToString()メソッドで行うことができますが、それをデバッグのみに使用する場合は適切ではないと思います。

20
Ilia G

Jsonを使用する場合は、Newtonsofts Jsonライブラリを使用することをお勧めします。Json表記でオブジェクト全体を出力すると、スペースと改行でフォーマットされます。デバッグ目的で複雑なオブジェクトを簡単に表示するためにこれを使用しました:

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

ここでは、Enumを整数ではなく文字列表現として表示するために、String Enumコンバーターも使用しました。

ライブラリは、NuGetからJson.NetまたはNewtonsoft Jsonとして入手できます。

または、ここから入手できます。

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

89
Richard

デバッグ目的だけの場合は、 DebuggerDisplayAttribute を使用します。

この属性を使用すると、ウォッチウィンドウの[値]セクションに表示されるオブジェクトの外観が変更されます(または、デバッグ中にマウスオーバーすると)

使用法:

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

}
23
vt100

また、しばらくの間Jsonを使用しました。しかし、今では PrettyPrint-Minimod を作成しました。 Nugetを介して追加できます(ソースコード配布です)。 Minimod が何であるかをご覧ください。

オブジェクトグラフをきれいに印刷し、列挙型および辞書に魔法をかけます。また、適切な改行を見つけようとします。

私はすぐにそれについてブログを書くでしょう-しかし、先に進んで試してみてください:-)

5

簡単で簡単な方法は、 ToString メソッドをオーバーライドすることです。

リンクは次のとおりです。 ToStringをオーバーライドする方法

5
Gustavo Mori
  1. インストールパッケージServiceStack.Text
  2. obj.Dump();

外部ライブラリを使用したくない場合は、独自のDump()拡張メソッドを作成します。

2

タイプのToString()をオーバーライドし、デバッグ表示用に独自のフォーマットされた文字列を提供するだけです。

1
Ed S.

これをかなり使用して、リストボックスにカスタムオブジェクトを入力します。

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

これは私にとって非常にうまくいきました:

string SerilizedText = "";
RootClass myclass= new Root RootClass ();
SerilizedText = JsonConvert.SerializeObject(myclass,Formatting.Indented) ;
1
maria

.ToString()メソッドをオーバーライドします。

0
Jay