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.MedicalLangkah 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 JSONMenggunakan rekomendasi kasus
| Scenario | Format yang disarankan |
|---|---|
| Layanan Web Baru | JSON |
| Integrasi PACS | Untuk XML |
| Halaman Utama Terjemah Melayu middleware | Untuk XML |
| Jawaban JavaScript Frontends | JSON |
| Transformasi XSLT | Untuk XML |
| Database NoSQL | JSON |
| Validasi Schema | Untuk 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.