Како конвертовати ДИЦОМ у КСМЛ и назад користећи ДицомКсмлСеријализатор
Овај туториал показује како конвертовати ДИЦОМ датотеке у КСМЛ формат и десеријализовати КССЛ назад у ЦКСМ користећи Ц#. КСПЛ формат је префериран за интеграцију са наследни системи, ХЛ7 радни токови, и окружења у којима је КМСЛ алатирање добро постављено.
Када користити XML преко JSON
- Закон о интегрисању:- Постојећи средњи софтвер и системи често очекују XML формат.
ХЛ7 компатибилност:- Системи здравствене заштите који користе ХЛ7 v2/v3 обично раде са КСМЛ-ом.
- КСНУМКС ХМЛ алат *:- Организације са утврђеним XSLT трансформацијама и XPath питањима.
- Схема валидације *:- КСМЛ схеми пружају строге способности за валидацију.
Принципи: Припрема за животну средину
- Инсталирајте Visual Studio или било који компатибилан .NET IDE.
- Креирање новог .NET 8 апликационог пројекта конзоле.
- Инсталирајте Aspose.Medical из менаџера пакета NuGet.
Корак по корак водич за конверзију ДИКОМ-а у КСМЛ
Корак 1: Инсталирајте Aspose.Medical
Додајте Аппосе.Медицинска библиотека у свој пројекат користећи НуГет.
Install-Package Aspose.MedicalКорак 2: Укључите неопходне имена
Додајте референце на потребне имена простора у вашем коду.
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;Корак 3: Преузмите ДИКОМ датотеку
Преузмите ДИКОМ датотеку коју желите конвертовати.
DicomFile dcm = DicomFile.Open("patient_scan.dcm");Корак 4: Серијализација на КСМЛ
Искористите је DicomXmlSerializer.Serialize Metoda za pretvaranje u XML.
string xml = DicomXmlSerializer.Serialize(dcm.Dataset);Корак 5: Сачувајте КСМЛ излаз
Сачувајте КСМЛ у датотеку за складиштење или пренос.
File.WriteAllText("patient_scan.xml", xml);Корак 6: Десеријализација КСМЛ-а назад у датотеку
Da biste pretvorili XML nazad u DICOM, koristite Deserialize Метода је.
Dataset? dataset = DicomXmlSerializer.Deserialize(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");Потпуни код Пример: КСМЛ у ДиКОМ конверзија
Ево комплетног примера за конверзију КСМЛ-а назад у ДИКОМ:
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.");
}Пример: Диком → КСМЛ → ДИКОМ
Потпуна кружна конверзија која показује интегритет података:
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 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 излаз
Величина поређења
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 | Препоручени формат |
|---|---|
| Нови веб услуге | ЈСОН |
| Интеграција ПАЦС-а | КСМЛ |
| ХЛ7 средњи | КСМЛ |
| JavaScript фронтендес | ЈСОН |
| XSLT трансформације | КСМЛ |
| NoSQL Базе података | ЈСОН |
| Схема валидације | КСМЛ |
Интеграција са системом наслеђа
Пример интеграције са наследном средњовером:
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}");
}Карактеристике кодирају питања
Обезбедите правилно кодирање приликом читања / писања КСМЛ датотека:
// 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();
}Велика обработка датотека
За веома велике ДИКОМ датотеке, размотрите стриминг:
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-а, што доводи до веће величине датотеке.
- Размислите о компресији за складиштење или пренос великих КСМЛ датотека.
- И ЈСОН и КСМЛ подржавају исте типове података и структуре ДИКОМ-а.
Закључак
Овај туториал је показао како конвертовати ДИЦОМ датотеке у КСМЛ формат и десериализовати КССЛ назад у Ц # користећи Аппосе.Медицински.КсМл серијализација је од суштинског значаја за интегрисање са наследном здравственим системима и окружењима које се ослањају на КМСЛ алат и радних токова.