ホームページ > バックエンド開発 > C++ > デバッグのために複雑なオブジェクトを C# で効果的に記録するにはどうすればよいですか?

デバッグのために複雑なオブジェクトを C# で効果的に記録するにはどうすればよいですか?

DDD
リリース: 2025-01-06 17:31:49
オリジナル
405 人が閲覧しました

How Can I Effectively Log Complex Objects in C# for Debugging?

C# での複雑なオブジェクトのログ記録

コードをデバッグするとき、実行時にオブジェクトの状態を表示すると役立つことがよくあります。 Visual Studio のイミディエイト ウィンドウには、? 構文を使用してオブジェクトの書式設定されたコンテンツを表示する便利な方法が用意されています。 objectname.

ロギングの目的でコード内からこれを実現するには、いくつかのアプローチを考慮する必要があります。

JSON シリアル化:

ラージ オブジェクト グラフのダンプには JSON シリアル化が使用されます。これは、Newtonsoft.Json ライブラリを使用して実行できます。

using Newtonsoft.Json;

public static class ObjectDumper
{
    public static string Dump(object obj)
    {
        return JsonConvert.SerializeObject(obj);
    }
}
ログイン後にコピー

イミディエイト ウィンドウで、次のコマンドを実行できます。

var logEntry = ObjectDumper.Dump(myObj);
ログイン後にコピー

JSON 構造を視覚化するには、logEntry を展開します。 [ローカル] ウィンドウで値を選択し、虫眼鏡の横にあるドロップダウン キャレットから [Json Visualizer] オプションを選択します。 icon.

Reflection と ToString():

もう 1 つのアプローチは、Reflection を使用してオブジェクトのプロパティと値にアクセスし、それらを文字列表現に手動で変換することです:

public static string Dump(object obj)
{
    StringBuilder sb = new StringBuilder();
    Type type = obj.GetType();
    PropertyInfo[] properties = type.GetProperties();

    sb.Append("Object of type: " + type.Name + "\n");
    foreach (PropertyInfo property in properties)
    {
        sb.Append(property.Name + ": ");
        sb.Append(property.GetValue(obj)?.ToString() ?? "null");
        sb.Append("\n");
    }

    return sb.ToString();
}
ログイン後にコピー

その他オプション:

  • Log4Net: カスタム オブジェクトのシリアル化をサポートする一般的なログ ライブラリ。
  • Serilog:幅広いシリアル化オプションを提供します。
  • カスタムフォーマット: オブジェクトにカスタム ToString() メソッドを実装して、ログに記録される形式を制御します。

以上がデバッグのために複雑なオブジェクトを C# で効果的に記録するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート