DICOM を XML と Back に変換する方法 DicomXmlSerializer

DICOM を XML と Back に変換する方法 DicomXmlSerializer

このチュートリアルでは、DICOM ファイルを XML フォーマットに変換する方法を示し、XML を C# を使用して DICOME に戻します。

XML を JSON で使用するとき

  • ●法的統合*:- 既存のメディアウェアやシステムは、しばらくXMLフォーマットを期待しています。

  • HL7 互換性:- HL7 v2/v3 を使用する医療システムは、通常 XML で動作します。

  • 「XMLツール」:- 設立されたXSLT変換とXPathリクエストを持つ組織。

  • スケジュール認証:- XML スケジュールは、厳格な認証機能を提供します。

原題: Preparing the Environment

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

DICOM を XML に変換するためのステップアップガイド

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

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

Install-Package Aspose.Medical

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

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

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

ステップ3:DICOMファイルをダウンロード

変換したいDICOMファイルをダウンロードします。

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

ステップ4:XMLにシリアル化

使用する The DicomXmlSerializer.Serialize XMLに変換する方法

string xml = DicomXmlSerializer.Serialize(dcm.Dataset);

ステップ5: XML 出力を保存する

XML を保存または送信するためのファイルに保存します。

File.WriteAllText("patient_scan.xml", xml);

ステップ6: XML をデータセットに戻す

XML を DICOM に変換するには、 Deserialize メソッド.

Dataset? dataset = DicomXmlSerializer.Deserialize(xml);

完全コード 例:DICOM から XML への変換

ここでは、DICOMをXMLに変換するための完全な例です。

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

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

// Convert to XML
string xml = DicomXmlSerializer.Serialize(dcm.Dataset);

// Save to file
File.WriteAllText("patient_scan.xml", xml);

Console.WriteLine("DICOM converted to XML successfully!");
Console.WriteLine($"Output saved to: patient_scan.xml");

完全コード 例: XML から DICOM への変換

ここでは、XMLをDICOMに変換するための完全な例です。

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

// Read XML from file
string xml = File.ReadAllText("patient_scan.xml");

// Deserialize to Dataset
Dataset? dataset = DicomXmlSerializer.Deserialize(xml);

if (dataset != null)
{
    // Create DicomFile from Dataset
    DicomFile dcm = new DicomFile(dataset);
    
    // Save as DICOM file
    dcm.Save("reconstructed.dcm");
    
    Console.WriteLine("XML converted back to DICOM successfully!");
}
else
{
    Console.WriteLine("Failed to deserialize XML.");
}

ラウンドトリップ 例:DICOM → XML → DIKOM

データの完全性を証明する丸いトリップ変換:

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

// Load original DICOM file
DicomFile original = DicomFile.Open("original_scan.dcm");
Console.WriteLine("Original DICOM loaded.");

// Convert to XML
string xml = DicomXmlSerializer.Serialize(original.Dataset);
Console.WriteLine($"Converted to XML ({xml.Length} characters).");

// Save XML (for transmission or storage)
File.WriteAllText("intermediate.xml", xml);

// Later: Deserialize XML back to Dataset
string loadedXml = File.ReadAllText("intermediate.xml");
Dataset? reconstructedDataset = DicomXmlSerializer.Deserialize(loadedXml);

if (reconstructedDataset != null)
{
    // Create new DicomFile
    DicomFile reconstructed = new DicomFile(reconstructedDataset);
    reconstructed.Save("reconstructed_scan.dcm");
    
    Console.WriteLine("Round-trip complete: DICOM → XML → DICOM");
}

XML 出力構造

XML 出力は、構造化された形式で DICOM タグを表しています。

<?xml version="1.0" encoding="utf-8"?>
<NativeDicomModel>
  <DicomAttribute tag="00080005" vr="CS" keyword="SpecificCharacterSet">
    <Value number="1">ISO_IR 100</Value>
  </DicomAttribute>
  <DicomAttribute tag="00080020" vr="DA" keyword="StudyDate">
    <Value number="1">20240115</Value>
  </DicomAttribute>
  <DicomAttribute tag="00100010" vr="PN" keyword="PatientName">
    <PersonName number="1">
      <Alphabetic>
        <FamilyName>DOE</FamilyName>
        <GivenName>JOHN</GivenName>
      </Alphabetic>
    </PersonName>
  </DicomAttribute>
  <DicomAttribute tag="00100020" vr="LO" keyword="PatientID">
    <Value number="1">12345</Value>
  </DicomAttribute>
</NativeDicomModel>

JSON 対 XML 出力の比較

サイズ比較

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

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

string json = DicomJsonSerializer.Serialize(dcm);
string xml = DicomXmlSerializer.Serialize(dcm.Dataset);

Console.WriteLine($"JSON size: {json.Length:N0} characters");
Console.WriteLine($"XML size: {xml.Length:N0} characters");
// XML is typically 20-40% larger than JSON

ケースの推奨事項

Scenario推奨形式
新しいWebサービスJSON
■PACS統合XML
HL7 メディアウェアXML
JavaScript フロントエンドJSON
XSLT変革XML
NoSQL データベースJSON
スケジュール認証XML

遺産システムの統合

遺産中間の統合の例:

using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
using System.Net.Http;
using System.Text;

DicomFile dcm = DicomFile.Open("patient_scan.dcm");
string xml = DicomXmlSerializer.Serialize(dcm.Dataset);

// Send to legacy SOAP service
using HttpClient client = new();
var content = new StringContent(xml, Encoding.UTF8, "application/xml");

HttpResponseMessage response = await client.PostAsync(
    "http://legacy-pacs/dicom/import",
    content
);

if (response.IsSuccessStatusCode)
{
    Console.WriteLine("XML successfully sent to legacy system!");
}

Troubleshooting

不適切なXMLの処理

エラー処理のための try-catch で deserialization を挿入する:

try
{
    Dataset? dataset = DicomXmlSerializer.Deserialize(xml);
    if (dataset == null)
    {
        Console.WriteLine("Deserialization returned null.");
    }
}
catch (System.Xml.XmlException ex)
{
    Console.WriteLine($"XML parsing error: {ex.Message}");
}
catch (Exception ex)
{
    Console.WriteLine($"Deserialization error: {ex.Message}");
}

キャラクターコード問題

XML ファイルを読む/書く際の適切な暗号化を確保する:

// Write with explicit encoding
using (StreamWriter writer = new StreamWriter("output.xml", false, Encoding.UTF8))
{
    writer.Write(xml);
}

// Read with explicit encoding
using (StreamReader reader = new StreamReader("input.xml", Encoding.UTF8))
{
    string xml = reader.ReadToEnd();
}

大ファイル処理

非常に大きいDICOMファイルの場合は、ストリーミングを検討してください:

using (FileStream fs = File.Create("large_output.xml"))
using (StreamWriter writer = new StreamWriter(fs, Encoding.UTF8))
{
    string xml = DicomXmlSerializer.Serialize(dcm.Dataset);
    writer.Write(xml);
}

追加情報

  • XML フォーマットは、適切なインデントでより良い人間の読みやすさを提供します。
  • XML は JSON より垂直で、ファイルサイズが大きくなります。
  • 大型XMLファイルを保存または転送するための圧縮を検討します。
  • JSON と XML は同じ DICOM データタイプと構造をサポートします。

結論

このチュートリアルは、DICOMファイルをXML形式に変換する方法を示し、Aspose.Medical を使用して C# で XML に戻ることを deserialize します。

 日本語