Cara Mengkonversi DICOM ke XML dan Kembali menggunakan DicomXmlSerializer

Cara Mengkonversi DICOM ke XML dan Kembali menggunakan DicomXmlSerializer

Tutorial ini menunjukkan bagaimana untuk mengkonversi file DICOM ke format XML dan deserialisasi XML kembali ke DicOM menggunakan C#. Format XML lebih disukai untuk integrasi dengan sistem warisan, aliran kerja HL7, dan lingkungan di mana alat XML telah ditubuhkan dengan baik.

Menggunakan XML di atas JSON

  • • Integrasi hukum *:- Mediaware dan sistem yang ada sering mengharapkan format XML.

  • • Kompatibilitas HL7 :- Sistem kesehatan menggunakan HL7 v2/v3 biasanya bekerja dengan XML.

  • *Menggunakan XML Tooling:- Organisasi dengan transformasi XSLT dan pertanyaan XPath.

    • Pengesahan program * :- Skema XML menyediakan kemampuan validasi yang ketat.

Persyaratan: Persiapan Lingkungan

  • Menginstal Visual Studio atau IDE .NET yang kompatibel.
  • Mencipta aplikasi .NET 8 baru.
  • Instal Aspose.Medical dari NuGet Package Manager.

Panduan Langkah-Langkah untuk Konversi DICOM ke XML

Langkah 1: Instalasi Aspose.Medical

Tambahkan perpustakaan Aspose.Medical ke proyek Anda menggunakan NuGet.

Install-Package Aspose.Medical

Langkah 2: Menyertakan ruang nama yang diperlukan

Tambahkan referensi ke ruang nama yang diperlukan dalam kode Anda.

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

Langkah 3: Muat turun file DICOM

Download file DICOM yang ingin Anda konversi.

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

Langkah 4: Serialisasi ke XML

Gunakan The DicomXmlSerializer.Serialize Metode untuk Konversi ke XML

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

Langkah 5: Simpan output XML

Simpan XML ke file untuk penyimpanan atau transmisi.

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

Langkah 6: Deserialize XML Back to Dataset

Untuk mengkonversi XML kembali ke DICOM, gunakan Deserialize Metode yang.

Dataset? dataset = DicomXmlSerializer.Deserialize(xml);

Contoh Kode Lengkap: Konversi DICOM ke XML

Berikut adalah contoh lengkap untuk konversi DICOM ke 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");

Contoh kode lengkap: Konversi XML ke DICOM

Berikut adalah contoh lengkap untuk konversi XML kembali ke 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.");
}

Contoh Ronde-Trip: DICOM → XML → DIM

Konversi bulat lengkap yang membuktikan integritas data:

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");
}

Contoh struktur output XML

Output XML mewakili tag DICOM dalam format terstruktur:

<?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>

Perbandingan JSON vs XML Output

Ukuran Perbandingan

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

Menggunakan rekomendasi kasus

ScenarioFormat yang disarankan
Layanan Web BaruJSON
Integrasi PACSUntuk XML
Halaman Utama Terjemah Melayu middlewareUntuk XML
Jawaban JavaScript FrontendsJSON
Transformasi XSLTUntuk XML
Database NoSQLJSON
Validasi SchemaUntuk XML

Integrasi dengan Sistem Legacy

Contoh integrasi dengan warisan middleware:

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

Pengelolaan Invalid XML

Wrap deserialization dalam try-catch untuk kesalahan pengendalian:

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}");
}

Karakter Mengencodkan Masalah

Pastikan kode yang tepat saat membaca/menulis file 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();
}

Pengelolaan file besar

Untuk file DICOM yang sangat besar, pertimbangkan streaming:

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);
}

Informasi Tambahan

  • Format XML memberikan pembacaan manusia yang lebih baik dengan indentasi yang tepat.
  • XML lebih verbous dari JSON, yang menghasilkan ukuran file yang lebih besar.
  • Pertimbangkan kompresi untuk menyimpan atau mengirim file XML besar.
  • JSON dan XML mendukung jenis data dan struktur DICOM yang sama.

Kesimpulan

Tutorial ini telah menunjukkan bagaimana untuk mengkonversi file DICOM ke format XML dan deserialisasi XML kembali ke DIKOM dalam C# menggunakan Aspose.Medical. XML serialisasi adalah penting untuk integrasi dengan sistem perawatan kesehatan yang diwarisi dan lingkungan yang bergantung pada XML alat dan aliran kerja.

 Indonesia