Comment convertir DICOM en XML et retour en utilisant DicomXmlSerializer
Ce tutoriel démontre comment convertir les fichiers DICOM au format XML et désérialiser XML en arrière à DicOM en utilisant C#. Format XML est préférable pour l’intégration avec les systèmes d’héritage, les flux de travail HL7 et les environnements où les outils XML sont bien établis.
Quand utiliser XML sur JSON
- Légalité de l’intégration :- Les médias existants et les systèmes attendent souvent le format XML.
Compatibilité HL7 :- Les systèmes de soins de santé utilisant HL7 v2/v3 fonctionnent généralement avec XML.
- Utilisation d’outils XML :- Organisations avec des transformations XSLT et des requêtes XPath établies.
- La validation du schéma :- Les schémas XML fournissent des capacités de validation strictes.
Étiquette : Préparer l’environnement
- Configurez Visual Studio ou tout IDE .NET compatible.
- Créer un nouveau projet d’application pour la console .NET 8.
- Installez Aspose.Medical à partir du NuGet Package Manager.
Guide pas à pas pour convertir DICOM en XML
Étape 1 : Installer Aspose.Medical
Ajoutez la bibliothèque Aspose.Medical à votre projet en utilisant NuGet.
Install-Package Aspose.MedicalÉtape 2 : Inclure les espaces de nom nécessaires
Ajoutez des références aux espaces de nom requis dans votre code.
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;Étape 3 : Télécharger le fichier DICOM
Téléchargez le fichier DICOM que vous voulez convertir.
DicomFile dcm = DicomFile.Open("patient_scan.dcm");Étape 4 : Sérialiser vers XML
Utilisez le DicomXmlSerializer.Serialize La méthode de conversion à XML.
string xml = DicomXmlSerializer.Serialize(dcm.Dataset);Étape 5: Sauvez la sortie XML
Enregistrer XML dans un fichier pour le stockage ou la transmission.
File.WriteAllText("patient_scan.xml", xml);Étape 6 : Désérialiser XML en retour à Dataset
Pour convertir XML en DICOM, utilisez le Deserialize La méthode.
Dataset? dataset = DicomXmlSerializer.Deserialize(xml);Exemple de code complet : DICOM à XML Conversion
Voici un exemple complet de la conversion de DICOM à 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 code complet: Conversion XML à DICOM
Voici un exemple complet de la conversion 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 : DICOM → XML → DIKOM
Conversion complète rond-trip démontrant l’intégrité des données :
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 de la structure de sortie XML
La sortie XML représente les tags DICOM dans un format structuré :
<?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>Comparer JSON versus XML Output
taille comparaison
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 JSONUtiliser les recommandations de cas
| Scenario | Formats recommandés |
|---|---|
| Nouveaux services Web | JSON |
| L’intégration PACS | XML |
| HL7 médiéval | XML |
| Les frontends de JavaScript | JSON |
| Les transformations XSLT | XML |
| Les bases de données NoSQL | JSON |
| Validation du schéma | XML |
Intégration avec les systèmes d’héritage
Exemple d’intégration avec l’héritage 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
Traitement de l’invalid XML
Téléchargez la désertification dans try-catch pour le traitement d’erreur :
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}");
}Caractéristiques codant les problèmes
Assurez-vous de coder correctement lors de la lecture/écriture des fichiers 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();
}Gestion de grands fichiers
Pour les fichiers DICOM très grands, considérez le 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);
}Informations supplémentaires
- Le format XML fournit une meilleure lecture humaine avec une indentation appropriée.
- XML est plus verbe que JSON, ce qui entraîne des tailles de fichiers plus grandes.
- Considérez la compression pour stocker ou transmettre de grands fichiers XML.
- JSON et XML soutiennent les mêmes types et structures de données DICOM.
Conclusion
Ce tutoriel a démontré comment convertir les fichiers DICOM dans le format XML et désérialiser XML en arrière à DIKOM en C# en utilisant Aspose.Medical. la sérialisation XML est essentielle pour l’intégration avec les systèmes de soins de santé héréditaires et les environnements qui reposent sur les outils et flux de travail XML.