DicomJsonSerializerオプションでDICOM JSONの出力をカスタマイズする方法

DicomJsonSerializerオプションでDICOM JSONの出力をカスタマイズする方法

このチュートリアルでは、C# で DicomJsonSerializerOptions を使用して DICOM JSON シリアリゼーションの出力をカスタマイズする方法を示しています。

なぜJSON出力をカスタマイズするのか?

さまざまなシステムは異なる JSON フォーマットを必要とする可能性があります。

  • タグ番号の代わりに人間読みやすいキーワードを使用する
  • タグ名を含むドキュメンタリー
  • 数値がどのように表現されるかを確認する
  • 特定の第三者システム要件を満たす

原題: Preparing the Environment

  • Visual Studio または 互換性のある .NET IDE を設定します.
  • 新しい .NET 8 コンソールアプリケーションプロジェクトを作成します。
  • NuGet Package Manager から Aspose.Medical をインストールします。

シリアル化オプション

オプション説明Impact
UseKeywordsAsJsonKeysJSONキーとしてタグ番号の代わりにDICOMキーワードを使用する"PatientName" VS "00100010"
WriteKeyword各タグオブジェクトにキーワードフィールドを含むAdds "keyword": "PatientName"
WriteName各タグオブジェクトに名称フィールドを含むAdds "name": "Patient's Name"
NumberHandlingコントロール数値代表ストレッチまたは実際のJSON番号としての数字

JSON 出力をカスタマイズするためのステップアップガイド

ステップ1:インストール Aspose.Medical

NuGet を使用してプロジェクトに Aspose.Medical ライブラリを追加します。

Install-Package Aspose.Medical

ステップ2:必要な名称スペースを含む

あなたのコードに必要な名称スペースへの参照を追加します.

using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
using System.Text.Json.Serialization;

ステップ3:オプションインスタンスを作成する

Aを作る DicomJsonSerializerOptions 設定を設定する例です。

DicomJsonSerializerOptions options = new DicomJsonSerializerOptions();

ステップ4:オプションの設定

あなたのJSON出力のための望ましいオプションを設定します。

options.UseKeywordsAsJsonKeys = true;
options.WriteKeyword = true;
options.WriteName = true;
options.NumberHandling = JsonNumberHandling.WriteAsString;

ステップ5:オプションをシリアル化する

選択肢を Serialize メソッドに移動します。

DicomFile dcm = DicomFile.Open("patient_scan.dcm");
string json = DicomJsonSerializer.Serialize(dcm, options, writeIndented: true);

ステップ6:カスタマイズされた出力を保存する

保存またはカスタマイズされた JSON を使用します。

File.WriteAllText("customized_output.json", json);
Console.WriteLine("Customized JSON output saved!");

すべてのオプションを含む完全なコードサンプル

以下は、すべてのカスタマイズオプションを示す完全な例です:

using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
using System.Text.Json.Serialization;

// Load DICOM file
DicomFile dcm = DicomFile.Open("patient_scan.dcm");

// Configure serialization options
DicomJsonSerializerOptions options = new DicomJsonSerializerOptions
{
    UseKeywordsAsJsonKeys = true,
    WriteKeyword = true,
    WriteName = true,
    NumberHandling = JsonNumberHandling.WriteAsString
};

// Serialize with custom options
string json = DicomJsonSerializer.Serialize(dcm, options, writeIndented: true);

// Save output
File.WriteAllText("fully_customized.json", json);

Console.WriteLine("DICOM serialized with all custom options!");
Console.WriteLine(json);

出力形式の比較

デフォルト出力(標準 PS3.18 フォーマット)

{
  "00100010": {
    "vr": "PN",
    "Value": [{ "Alphabetic": "DOE^JOHN" }]
  },
  "00100020": {
    "vr": "LO",
    "Value": ["12345"]
  }
}

使用キーワードAsJsonKeys = true

{
  "PatientName": {
    "vr": "PN",
    "Value": [{ "Alphabetic": "DOE^JOHN" }]
  },
  "PatientID": {
    "vr": "LO",
    "Value": ["12345"]
  }
}

・WriteKeyword と WriteName = 真実

{
  "00100010": {
    "vr": "PN",
    "keyword": "PatientName",
    "name": "Patient's Name",
    "Value": [{ "Alphabetic": "DOE^JOHN" }]
  }
}

ナンバーハンドリング = WriteAsString

{
  "00280010": {
    "vr": "US",
    "Value": ["512"]
  }
}

タイトル(英名):With NumberHandling = AllowReadingFromString♰ WriteAsNumber

{
  "00280010": {
    "vr": "US",
    "Value": [512]
  }
}

例を用いるケース

人間読みやすい文書

DicomJsonSerializerOptions docOptions = new DicomJsonSerializerOptions
{
    UseKeywordsAsJsonKeys = true,
    WriteKeyword = true,
    WriteName = true
};

string documentationJson = DicomJsonSerializer.Serialize(dcm, docOptions, writeIndented: true);

PS3.18 コンプライアントウェブサービス

// Use default options for DICOM PS3.18 compliance
DicomJsonSerializerOptions webOptions = new DicomJsonSerializerOptions
{
    UseKeywordsAsJsonKeys = false,  // Use tag numbers
    WriteKeyword = false,
    WriteName = false,
    NumberHandling = JsonNumberHandling.WriteAsString
};

string ps318Json = DicomJsonSerializer.Serialize(dcm, webOptions);

JavaScript フロントエンド統合

DicomJsonSerializerOptions jsOptions = new DicomJsonSerializerOptions
{
    UseKeywordsAsJsonKeys = true,  // Easier to work with in JS
    NumberHandling = JsonNumberHandling.AllowReadingFromString  // Native numbers
};

string jsCompatibleJson = DicomJsonSerializer.Serialize(dcm, jsOptions);

データベースストレージ

DicomJsonSerializerOptions dbOptions = new DicomJsonSerializerOptions
{
    UseKeywordsAsJsonKeys = true,  // Better for querying
    WriteKeyword = false,          // Reduce storage size
    WriteName = false
};

string compactJson = DicomJsonSerializer.Serialize(dcm, dbOptions);

重要考慮事項

互換性警告

非標準オプションは、いくつかの DICOM パッサーとの互換性を破る可能性があります:

// WARNING: This format may not be compatible with all DICOM JSON parsers
DicomJsonSerializerOptions nonStandardOptions = new DicomJsonSerializerOptions
{
    UseKeywordsAsJsonKeys = true  // Not PS3.18 compliant
};

// For maximum compatibility, use defaults:
DicomJsonSerializerOptions standardOptions = new DicomJsonSerializerOptions();

遵守に関する推奨事項

DICOM PS3.18 の遵守が必要な場合は、デフォルト設定を使用します。

// PS3.18 compliant serialization
string compliantJson = DicomJsonSerializer.Serialize(dcm);  // No custom options

オプションによるストリームベースのセリアリズム

大型ファイルでは、ストリームベースのシリアリズムを使用します。

using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;

DicomFile dcm = DicomFile.Open("large_scan.dcm");

DicomJsonSerializerOptions options = new DicomJsonSerializerOptions
{
    UseKeywordsAsJsonKeys = true,
    WriteKeyword = true
};

using (FileStream fs = File.Create("large_customized.json"))
{
    DicomJsonSerializer.Serialize(fs, dcm.Dataset, options, writeIndented: true);
}

追加情報

  • カスタマイズされたオプションは、セリアリゼーションとデスリアリティの両方に影響を与えます - データを回転する際に一貫した選択肢を確保します。
  • The WriteName オプションは、人間が読むDICOMタグ名を追加し、JSONサイズを増やすが、読みやすさを向上させます。
  • いくつかの第三者システムは、特定のJSONフォーマットを必要とする可能性があります - オプションを選択する前にその文書を確認します。

結論

This tutorial has demonstrated how to customize DICOM JSON serialization output in C# using Aspose.Medical. DicomJsonSerializerOptions を設定することで、特定の統合要件を満たし、読みやすさ、サイズ、および互換性のニーズをバランス付けるために、JSON フォーマットを調整することができます。

 日本語