Bagaimana untuk menukar DICOM kepada XML dan Kembali menggunakan DicomXmlSerializer

Bagaimana untuk menukar DICOM kepada XML dan Kembali menggunakan DicomXmlSerializer

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

Menggunakan XML di atas JSON

  • *Keselamatan dan integrasi * :- Mediaware dan sistem yang sedia ada sering mengharapkan format XML.

  • H7 Kompatibiliti :- Sistem penjagaan kesihatan menggunakan HL7 v2/v3 biasanya berfungsi dengan XML.

  • *Perkh Penggunaan XML :- Pertubuhan dengan transformasi XSLT yang ditubuhkan dan pertanyaan XPath.

    • Pengesahan Rancangan * :- Skim XML menyediakan keupayaan pengesahan yang ketat.

Tag: persiapan persekitaran

  • Menyediakan Visual Studio atau mana-mana .NET IDE yang kompatibel.
  • Mencipta projek aplikasi .NET 8 baru.
  • Instal Aspose.Medical daripada NuGet Package Manager.

Langkah-langkah panduan untuk menukar DICOM kepada XML

Langkah 1: Instal Aspose.Medical

Tambah perpustakaan Aspose.Medical kepada projek anda menggunakan NuGet.

Install-Package Aspose.Medical

Langkah 2: Masukkan ruang nama yang diperlukan

Tambah rujukan kepada ruang nama yang diperlukan dalam kod anda.

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

Langkah 3: Muat turun fail DICOM

Muat turun fail DICOM yang anda ingin konversi.

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

Langkah 4: Serialisasi kepada XML

Gunakan yang DicomXmlSerializer.Serialize cara untuk menukar kepada XML.

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

Langkah 5: Simpan output XML

Simpan XML ke dalam fail untuk penyimpanan atau penghantaran.

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

Langkah 6: Deserialisasi XML Kembali ke Dataset

Untuk menukar XML kembali kepada DICOM, gunakan Deserialize Kaedah yang.

Dataset? dataset = DicomXmlSerializer.Deserialize(xml);

Contoh Kod Lengkap: Konversi DICOM ke XML

Berikut ialah contoh lengkap untuk menukar DICOM kepada 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 Kod Lengkap: Konversi XML ke DICOM

Berikut ialah contoh lengkap untuk menukar XML kembali kepada 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.");
}

Perbincangan:Dicom → XML → Dicom

Penukaran laluan bulat lengkap yang membuktikan integriti 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

Keluaran 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

Perbandingan saiz

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

Penggunaan Kes Rekomendasi

ScenarioFormat yang disyorkan
Perkhidmatan Web BaruJSON
Integrasi PACSPerbezaan XML
Perkhidmatan HL7 middlewarePerbezaan XML
Perbincangan JavaScript FrontendsJSON
Perubahan XSLTPerbezaan XML
NoSQL pangkalan dataJSON
Pengesahan skemaPerbezaan XML

Integrasi dengan sistem warisan

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

Menguruskan Invalid XML

Wrap deserialization dalam try-catch untuk pemprosesan ralat:

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

Ciri-ciri yang menyulitkan masalah

Memastikan pengekodan yang betul apabila membaca/menulis fail 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();
}

Pengendalian fail yang besar

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

Maklumat tambahan

  • Format XML menyediakan pembacaan manusia yang lebih baik dengan indentasi yang betul.
  • XML lebih verbal daripada JSON, yang membawa kepada saiz fail yang lebih besar.
  • Pertimbangkan kompresi untuk menyimpan atau memindahkan fail XML yang besar.
  • Kedua-dua JSON dan XML menyokong jenis dan struktur data DICOM yang sama.

Conclusion

Tutorial ini telah menunjukkan bagaimana untuk menukar fail DICOM ke format XML dan deserialisasi XML kembali ke DIKOM dalam C# menggunakan Aspose.Medical. XML serialisasi adalah penting untuk mengintegrasikan dengan warisan sistem penjagaan kesihatan dan persekitaran yang bergantung kepada XML alat dan aliran kerja.

 Melayu