Com convertir DICOM en XML i Back utilitzant DicomXmlSerialitzador
Aquest tutorial demostra com convertir els arxius DICOM en el format XML i deserialitzar XML de tornada al format C#. Format XML és preferit per a la integració amb els sistemes d’herència, fluxos de treball HL7 i entorns on l’eina XML està ben establerta.
Quan utilitzar XML sobre JSON
- Integració legal *:- Els mitjans existents i els sistemes sovint esperen el format XML.
H7 Compatibilitat:- Els sistemes de salut que utilitzen HL7 v2/v3 normalment funcionen amb XML.
*Tools de xml *:- Organitzacions amb transformacions XSLT establertes i consultes XPath.
- Validació del programa *:- Els esquemes XML proporcionen capacitats de validació estrictes.
Previsió: Preparar el medi ambient
- Instal·lació de Visual Studio o qualsevol compatible .NET IDE.
- Crear un nou projecte d’aplicació .NET 8 consola.
- Instal·la Aspose.Medical des del NuGet Package Manager.
Guia de pas a pas per convertir DICOM en XML
Pas 1: Instal·lació Aspose.Medical
Afegeix la biblioteca d’Aspose.Medical al teu projecte utilitzant NuGet.
Install-Package Aspose.MedicalPas 2: Incloure els espais de nom necessaris
Afegeix referències als espais de nom requerits en el teu codi.
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;Pas 3: Carregar el fitxer DICOM
Carregueu el fitxer DICOM que voleu convertir.
DicomFile dcm = DicomFile.Open("patient_scan.dcm");Pas 4: Serialitzar a XML
Utilitza el DicomXmlSerializer.Serialize El mètode de conversió a XML.
string xml = DicomXmlSerializer.Serialize(dcm.Dataset);Pas 5: Salvar la sortida XML
Salvar el XML a un arxiu per a l’emmagatzematge o transmissió.
File.WriteAllText("patient_scan.xml", xml);Pas 6: Deserialitzar XML de tornada a Dataset
Per convertir XML de nou a DICOM, utilitzeu el Deserialize El mètode.
Dataset? dataset = DicomXmlSerializer.Deserialize(xml);Exemple de codi complet: Conversió de DICOM a XML
Aquí teniu un exemple complet de la conversió de DICOM a 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");Exemple de codi complet: Conversió XML a DICOM
Aquí teniu un exemple complet de la conversió de XML en 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.");
}Exemple de ruta: DICOM → XML → Dicom
Conversió completa de ronda que demostra la integritat de dades:
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");
}Exemple d’estructures de sortida XML
La sortida XML representa les etiquetes DICOM en un format estructurat:
<?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>Comparació de resultats JSON vs XML
Taxa de comparació
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 JSONRecomanacions de cas
| Scenario | El format recomanat |
|---|---|
| Nou servei web | JSON |
| Integració del PACS | XML |
| HL7 mitjà | XML |
| Els frontends de JavaScript | JSON |
| XSLT transformació | XML |
| NoSQL bases de dades | JSON |
| Validació del programa | XML |
Integració amb els sistemes de llegat
Exemple d’integració amb heretat 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
Gestió d’invaliditats XML
Torna la deserialització en try-catch per a la gestió d’errors:
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}");
}El caràcter encodant els problemes
Assegurar la correcta codificació en llegir/escriure arxius 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();
}Gestió de fitxers grans
Per a arxius DICOM molt grans, considereu streaming:
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);
}Informació addicional
- El format XML proporciona una millor lectura humana amb la correcta indentació.
- XML és més verbós que JSON, el que porta a grans dimensions de fitxers.
- Considera la compressió per a l’emmagatzematge o transmissió de grans fitxers XML.
- Tant JSON com XML donen suport als mateixos tipus de dades i estructures de DICOM.
Conclusió
Aquest tutorial ha demostrat com convertir els arxius DICOM en format XML i deserialitzar XML de tornada a Dicom en C# utilitzant Aspose.Medical. la serialització XML és essencial per a la integració amb els sistemes d’atenció sanitària i els entorns que es basen en l’eines i fluxos de treball XML.