Wie man DICOM in XML und zurück konvertiert mit DicomXmlSerializer
Dieses Tutorial zeigt, wie man DICOM-Dateien in XML-Format umwandelt und XML zurück in C# deserialisiert. XML Format ist für die Integration mit Erbe-Systemen, HL7 Workflows und Umgebungen bevorzugt, in denen XML Tooling gut etabliert ist.
Wann XML über JSON verwenden
• Legacy Integration *:- Bestehende middleware und Systeme erwarten oft XML-Format.
*HL7 Kompatibilität- Gesundheitssysteme mit HL7 v2/v3 arbeiten in der Regel mit XML zusammen.
- XML Tooling *:- Organisationen mit etablierten XSLT Transforms und XPath Queries.
- Schema Validation *:- XML-Schema bietet strenge Validierungskapazitäten.
Voraussetzungen: Umwelt vorbereiten
- Installieren Sie Visual Studio oder eine kompatible .NET IDE.
- Erstellen Sie ein neues .NET 8-Konsole-Anwendungsprojekt.
- Installieren Sie Aspose.Medical vom NuGet Package Manager.
Schritt für Schritt Guide zum Umwandeln von DICOM in XML
Schritt 1: Installieren Aspose.Medical
Fügen Sie die Aspose.Medical Bibliothek zu Ihrem Projekt mit NuGet hinzu.
Install-Package Aspose.MedicalSchritt 2: Inkludieren Sie notwendige Namenräume
Fügen Sie Referenzen zu den erforderlichen Namenräumen in Ihrem Code hinzu.
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;Schritt 3: Laden Sie die DICOM-Datei herunter
Laden Sie die DICOM-Datei herunter, die Sie konvertieren möchten.
DicomFile dcm = DicomFile.Open("patient_scan.dcm");Schritt 4: Serialisieren zu XML
Verwenden Sie die DicomXmlSerializer.Serialize Methode zur Konvertierung in XML.
string xml = DicomXmlSerializer.Serialize(dcm.Dataset);Schritt 5: Speichern Sie den XML-Ausgang
Speichern Sie XML in eine Datei zur Speicherung oder Übertragung.
File.WriteAllText("patient_scan.xml", xml);Schritt 6: Deserialisieren von XML zurück zum Dataset
Um XML zurück in DICOM zu konvertieren, verwenden Sie die Deserialize Die Methode.
Dataset? dataset = DicomXmlSerializer.Deserialize(xml);Komplett Code Beispiel: DICOM zum XML-Konvertierung
Hier ein vollständiges Beispiel für die Konvertierung von DICOM in 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");Komplett Code Beispiel: XML zu DICOM Konvertierung
Hier ein vollständiges Beispiel für die Umwandlung von XML zurück in 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 Beispiel: DICOM → XML → DIKOM
Vollständige Runde-Trip-Konvertierung, die die Datenintegrität demonstriert:
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");
}Beispiele für XML Output Structure
Die XML-Ausgabe repräsentiert die DICOM-Tags in einem strukturierten Format:
<?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 vs XML Output vergleichen
Größe Vergleich
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 JSONVerwenden Sie Case Empfehlungen
| Scenario | Empfohlene Formate |
|---|---|
| Neue Web-Dienste | JSON |
| Legacy PACS Integration | XML |
| HL7 MIDDWARE | XML |
| JavaScript Frontends | JSON |
| XSLT Transformationen | XML |
| NoSQL Datenbanken | JSON |
| Schema Validierung | XML |
Integration mit Legacy-Systemen
Beispiele für die Integration mit 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
Verarbeitung von Invalid XML
Wrap Deserialisierung in try-catch für Fehlerbehandlung:
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}");
}Charakter verschlüsseln Probleme
Stellen Sie sicher, dass Sie beim Lesen / Schreiben von XML-Dateien ordnungsgemäß verschlüsselt werden:
// 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();
}Große Dateiverarbeitung
Für sehr große DICOM-Dateien, beachten Sie 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);
}Zusätzliche Informationen
- Das XML-Format bietet eine bessere menschliche Lesbarkeit mit angemessener Indentation.
- XML ist verböser als JSON, was zu größeren Dateigrößen führt.
- Betrachten Sie die Kompression für die Speicherung oder Übertragung von großen XML-Dateien.
- JSON und XML unterstützen die gleichen DICOM-Datentypen und Strukturen.
Schlussfolgerungen
Dieses Tutorial hat gezeigt, wie man DICOM-Dateien in XML-Format umwandelt und XML zurück in C# mit Aspose.Medical dezerialisiert.XML serialisierung ist unerlässlich für die Integration mit vererbten Gesundheitssystemen und Umgebungen, die sich auf XML Toolsing und Workflows verlassen.