Как да конвертирате DICOM в XML и Back с помощта на DicomXmlSerializer

Как да конвертирате DICOM в XML и Back с помощта на DicomXmlSerializer

Този урок показва как да се конвертират DICOM файлове в XML формат и деериализират XML обратно в C#. Форматът XML е предпочитан за интеграция с наследствени системи, HL7 работни потоци и среди, където XML инструменти е добре установена.

Кога да използвате XML чрез JSON

    • Закон за интегриране *:- Съществуващите middleware и системи често очакват 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 обратно към 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 Conversion

Ето един пълен пример за конвертиране на 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
Интеграция на PACSКъм XML
HL7 средноКъм XML
JavaScript фронтоветеJSON
XSLT трансформацияКъм XML
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 обратно в DIKOM в C# с помощта на Aspose.Medical. XML сериализация е от съществено значение за интегриране с наследствени здравни системи и среди, които се основават на XML инструментиране и работни потоци.

 Български