วิธีการแปลง DICOM ไปยัง XML และ Back โดยใช้ DicomXmlSerializer

วิธีการแปลง DICOM ไปยัง XML และ Back โดยใช้ DicomXmlSerializer

การสอนนี้แสดงให้เห็นว่าวิธีการแปลงไฟล์ DICOM ไปยังรูปแบบ XML และ deserialize XML กลับไปสู่ DicOM โดยใช้ C# รูปแบบ XML เป็นที่ต้องการสําหรับการรวมกับระบบพันธมิตรการทํางานของ HL7 และสภาพแวดล้อมที่เครื่องมือ XML ได้รับการตั้งค่าได้ดี

เมื่อใช้ XML บน JSON

  • การบูรณาการทางกฎหมาย:- ซอฟต์แวร์กลางที่มีอยู่และระบบมักคาดหวังรูปแบบ XML

  • HL7 ความเข้ากันได้:- ระบบการดูแลสุขภาพที่ใช้ HL7 v2/v3 โดยทั่วไปทํางานกับ XML

  • *เครื่องมือ XML *:- องค์กรที่มีการเปลี่ยนแปลง XSLT และคําถาม XPath ที่ตั้งขึ้น

  • การยืนยัน schema:- Schemes XML ให้ความสามารถในการยืนยันอย่างเคร่งครัด

ข้อกําหนด: การเตรียมสิ่งแวดล้อม

  • ติดตั้ง Visual Studio หรือ IDE .NET ที่เข้ากันได้ใด ๆ.
  • สร้างโครงการการใช้งาน .NET 8 ใหม่
  • ติดตั้ง Aspose.Medical จาก NuGet Package Manager

คู่มือขั้นตอนเพื่อแปลง DICOM ไปยัง XML

ขั้นตอน 1: ติดตั้ง Aspose.Medical

เพิ่มห้องสมุด Aspose.Medical ไปยังโครงการของคุณโดยใช้ NuGet

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: Serialize ไปยัง XML

ใช DicomXmlSerializer.Serialize วิธีการแปลงเป็น XML

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

ขั้นตอน 5: เก็บออก XML

บันทึก XML ไปยังไฟล์เพื่อจัดเก็บหรือส่ง

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

ขั้นตอน 6: Deserialize XML Back to Dataset

เพื่อแปลง 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 vs XML Output

การเปรียบเทียบขนาด

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รูปแบบที่แนะนํา
บริการเว็บใหม่JSON
การบูรณาการ PACSXML
HL7 middlewareXML
แอปพลิเคชันJSON
XSLT การเปลี่ยนแปลงXML
ฐานข้อมูล NoSQLJSON
การรับรอง schemaXML

การบูรณาการกับระบบพันธมิตร

ตัวอย่างการบูรณาการกับ میراث 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

การจัดการ XML Invalid

Wrap deserialization ใน try-catch สําหรับการจัดการข้อผิดพลาด:

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 ให้ความสามารถในการอ่านของมนุษย์ได้ดีขึ้นด้วย indentation ที่เหมาะสม
  • XML มากกว่า JSON ซึ่งทําให้ขนาดไฟล์ขนาดใหญ่ขึ้น
  • โปรดพิจารณาการบีบอัดเพื่อจัดเก็บหรือส่งไฟล์ XML ขนาดใหญ่
  • ทั้ง JSON และ XML สนับสนุนประเภทข้อมูลและโครงสร้างเดียวกันของ DICOM

ข้อสรุป

การสอนนี้ได้แสดงให้เห็นว่าวิธีการแปลงไฟล์ DICOM ไปยังรูปแบบ XML และ deserialize XML กลับไปสู่ DicOM ใน C# โดยใช้ Aspose.Medical การรับรอง XML เป็นสิ่งสําคัญสําหรับการรวมกับระบบการดูแลสุขภาพและสภาพแวดล้อมที่เชื่อมโยงกับเครื่องมือ XML และการไหลของงาน

 แบบไทย