Как да конвертирате 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 инструментиране и работни потоци.