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.MedicalStap 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 JSONGebruik Case aanbevelingen
| Scenario | Aanbevolen format |
|---|---|
| Nieuwe webdiensten | JSON |
| Legacy PACS integratie | XML |
| HL7 Middelware | XML |
| JavaScript frontends | JSON |
| XSLT transformatie | XML |
| NoSQL databases | JSON |
| Schema Validatie | XML |
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.