Com convertir DICOM en XML i Back utilitzant DicomXmlSerialitzador

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.Medical

Pas 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 JSON

Recomanacions de cas

ScenarioEl format recomanat
Nou servei webJSON
Integració del PACSXML
HL7 mitjàXML
Els frontends de JavaScriptJSON
XSLT transformacióXML
NoSQL bases de dadesJSON
Validació del programaXML

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.

 Català