Hoe om te zetten DICOM naar XML en terug met behulp van DicomXmlSerializer

Hoe om te zetten DICOM naar XML en terug met behulp van DicomXmlSerializer

Dit tutorial toont aan hoe om DICOM-bestanden in XML-formaat te converteren en XML terug te deserialiseren naar DIKOM met behulp van C#. XML format is voorkeur voor integratie met erfgoedstelsels, HL7 werkstromen, en omgevingen waar XML tooling is goed gevestigd.

Wanneer XML over JSON te gebruiken

    • Legacy integratie *- De bestaande middenware en systemen verwachten vaak XML-formaat.
  • HL7 Compatibiliteit- Gezondheidszorgsystemen met behulp van HL7 v2/v3 werken meestal met XML.

    • XML Tooling *- Organisaties met gevestigde XSLT transforms en XPath queries.
    • Schema Validatie *- XML-schema’s bieden strikte validatiecapaciteiten.

Voorwaarden: het voorbereiden van het milieu

  • Installeer Visual Studio of een compatibele .NET IDE.
  • Maak een nieuw .NET 8 console-applicatieproject.
  • Installeer Aspose.Medical vanaf de NuGet Package Manager.

Step-by-step gids voor het converteren van DICOM naar XML

Stap 1: Installeer Aspose.Medical

Voeg de Aspose.Medische bibliotheek toe aan uw project met behulp van NuGet.

Install-Package Aspose.Medical

Stap 2: Inkluderen van noodzakelijke naamruimten

Voeg verwijzingen toe aan de vereiste naamruimten in uw code.

using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;

Stap 3: Download de DICOM-bestand

Download het DICOM-bestand dat u wilt converteren.

DicomFile dcm = DicomFile.Open("patient_scan.dcm");

Stap 4: Serialiseren naar XML

Gebruik de DicomXmlSerializer.Serialize Methode om te converteren naar XML.

string xml = DicomXmlSerializer.Serialize(dcm.Dataset);

Stap 5: Save the XML output

Speel de XML op een bestand voor opslag of overdracht.

File.WriteAllText("patient_scan.xml", xml);

Stap 6: Deserialiseren van XML terug naar Dataset

Om XML terug te converteren naar DICOM, gebruik de Deserialize De methode.

Dataset? dataset = DicomXmlSerializer.Deserialize(xml);

Complete code voorbeeld: DICOM naar XML conversie

Hier is een complete voorbeeld van het omzetten van DICOM naar 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");

Volledige code voorbeeld: XML naar DICOM Conversie

Hier is een complete voorbeeld van het omzetten van XML terug naar 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.");
}

Round-Trip Voorbeeld: DICOM → XML → DIKOM

Complete round-trip conversie die de integriteit van gegevens demonstreert:

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");
}

Voorbeeld XML output structuur

De XML-uitgang vertegenwoordigt DICOM-tags in een gestructureerd formaat:

<?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 versus XML output vergelijken

Grootte vergelijking

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

Gebruik Case aanbevelingen

ScenarioAanbevolen format
Nieuwe webdienstenJSON
Legacy PACS integratieXML
HL7 MiddelwareXML
JavaScript frontendsJSON
XSLT transformatieXML
NoSQL databasesJSON
Schema ValidatieXML

Integratie met Legacy Systems

Een voorbeeld van integratie met legacy 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

Verwerking van invalid XML

Wrap deserialisatie in try-catch voor foutbehandeling:

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}");
}

Character Encoding Problemen

Zorg ervoor dat de juiste codering bij het lezen/schrijven van XML-bestanden:

// 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();
}

Grote bestandsbehandeling

Voor zeer grote DICOM bestanden, overwegen 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);
}

Aanvullende informatie

  • XML-formaat biedt een betere menselijke leesbaarheid met de juiste indentatie.
  • XML is verboseer dan JSON, wat resulteert in grotere bestandsgrootte.
  • Overweeg compressie voor het opslaan of verzenden van grote XML-bestanden.
  • Zowel JSON als XML ondersteunen dezelfde DICOM-data typen en structuren.

Conclusie

Deze tutorial heeft aangetoond hoe om DICOM-bestanden in XML-formaat te converteren en XML terug te deserialiseren naar DIKOM in C# met behulp van Aspose.Medical. XML serialisatie is essentieel voor integratie met erfelijk gezondheidszorgssystemen en omgevingen die afhankelijk zijn van XML tooling en werkstromen.

 Nederlands