كيفية تحويل DICOM إلى XML والعودة باستخدام DicomXmlSerializer

كيفية تحويل DICOM إلى XML والعودة باستخدام DicomXmlSerializer

يظهر هذا الدليل كيفية تحويل ملفات DICOM إلى تنسيق XML وتفريغ XML مرة أخرى إلى DicOM باستخدام C#. يتم تفضيل شكل XML للاندماج مع أنظمة التراث ، وتدفقات العمل HL7 ، والبيئات حيث يتم تأسيس أدوات XML بشكل جيد.

كيفية استخدام XML عبر JSON

    • التكامل القانوني *:- متوسطة البرمجيات والأنظمة الحالية غالبا ما تتوقع تنسيق XML.
  • المتوافق مع HL7:- نظام الرعاية الصحية باستخدام HL7 v2/v3 يعمل عادة مع XML.

    • أدوات XML * :- المنظمات مع تأسيس XSLT التحويلات و XPath الأسئلة.
    • التصديق على النموذج *:- توفر مخططات XML قدرات صارمة للتصديق.

المعايير: إعداد البيئة

  • إعداد Visual Studio أو أي .NET IDE متوافق.
  • إنشاء مشروع تطبيقات .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: تسلسل إلى XML

استخدمها 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 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
التراث PACS التكاملXML
HL7 وسطاءXML
جافا سكريبت frontendsJSON
تحويلات XSLTXML
NoSQL قواعد البياناتJSON
نظام التصديقXML

التكامل مع أنظمة التراث

نموذج التكامل مع الوراثة 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 غير صالح

إدخال التطهير في 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 يوفر قراءة إنسانية أفضل مع التصنيف المناسب.
  • XML هو أكثر عمودية من JSON ، مما يؤدي إلى حجم ملف أكبر.
  • فكر في الضغط لتخزين أو نقل ملفات XML الكبيرة.
  • يدعم كل من JSON و XML نفس أنواع البيانات والهياكل DICOM.

استنتاجات

وقد أظهرت هذه الدليل كيفية تحويل ملفات DICOM إلى تنسيق XML وتفريغ XML مرة أخرى إلى DicOM في C# باستخدام Aspose.Medical.

 عربي