Come convertire DICOM in XML e Back utilizzando DicomXmlSerializer
Questo tutorial dimostra come convertire i file DICOM in formato XML e deserializzare XML indietro a DicOM utilizzando C#. Il formato XML è preferito per l’integrazione con i sistemi di eredità, i flussi di lavoro HL7 e gli ambienti in cui lo strumento XML è ben stabilito.
Quando utilizzare XML su JSON
• Integrazione legale *:- I middleware esistenti e i sistemi spesso aspettano il formato XML.
** Compatibilità HL7**:- I sistemi di assistenza sanitaria che utilizzano HL7 v2/v3 lavorano tipicamente con XML.
- Il testo di XML Tooling:- Organizzazioni con stabilite trasformazioni XSLT e domande XPath.
- Validazione del programma *:- I schemi XML forniscono capacità di validazione rigorose.
Prerequisiti: preparare l’ambiente
- Inserisci Visual Studio o qualsiasi compatibile .NET IDE.
- Creare un nuovo progetto di applicazione .NET 8 console.
- Installare Aspose.Medical dal NuGet Package Manager.
Guida passo dopo passo per la conversione di DICOM in XML
Passo 1: Installare Aspose.Medical
Aggiungi la biblioteca medica Aspose al tuo progetto utilizzando NuGet.
Install-Package Aspose.MedicalPasso 2: Includere gli spazi di nome necessari
Aggiungi riferimenti agli spazi di nome richiesti nel tuo codice.
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;Passo 3: Caricare il file DICOM
Scarica il file DICOM che desideri convertire.
DicomFile dcm = DicomFile.Open("patient_scan.dcm");Passo 4: Serializzare a XML
Utilizzare il DicomXmlSerializer.Serialize Metodo di conversione in XML.
string xml = DicomXmlSerializer.Serialize(dcm.Dataset);Passo 5: Salva l’output XML
Salva XML in un file per archiviazione o trasmissione.
File.WriteAllText("patient_scan.xml", xml);Passo 6: Deserializzare XML Torna al Dataset
Per convertire XML di nuovo in DICOM, utilizzare il Deserialize Il metodo.
Dataset? dataset = DicomXmlSerializer.Deserialize(xml);Esempio di codice completo: Conversione DICOM a XML
Ecco un esempio completo per la conversione di 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");Esempio di codice completo: Conversione XML a DICOM
Ecco un esempio completo per la conversione di XML 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.");
}Esempio di round-trip: DICOM → XML → DIKOM
Conversione completa round-trip che dimostra l’integrità dei dati:
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");
}Esempio Struttura di uscita XML
L’output XML rappresenta le etichette DICOM in un formato strutturato:
<?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>Risultati di JSON vs XML Output
Dimensioni di confronto
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 JSONUtilizzare le raccomandazioni Case
| Scenario | Il formato raccomandato |
|---|---|
| Nuovi servizi web | di JSON |
| L’integrazione del PACS | di XML |
| HL7 di middleware | di XML |
| Giochi di JavaScript frontends | di JSON |
| Trasformazioni XSLT | di XML |
| Database di NoSQL | di JSON |
| Validazione schema | di XML |
L’integrazione con i sistemi legati
Esempio di integrazione con 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
Trattamento invalido XML
Inserisci la deserializzazione in try-catch per il trattamento degli errori:
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}");
}Personaggi che codificano i problemi
Assicurarsi di codificare correttamente durante la lettura/scrittura dei file 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();
}Big file di gestione
Per i file DICOM molto grandi, considerare 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);
}Informazioni aggiuntive
- Il formato XML fornisce una migliore lettura umana con una corretta indentazione.
- XML è più verbo di JSON, portando a grandi dimensioni di file.
- Considera la compressione per la memorizzazione o la trasmissione di grandi file XML.
- Sia JSON che XML supportano gli stessi tipi di dati e strutture DICOM.
conclusione
Questo tutorial ha dimostrato come convertire i file DICOM in formato XML e deserializzare XML in C# utilizzando Aspose.Medical.