Comment convertir DICOM en XML et retour en utilisant DicomXmlSerializer

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 JSON

Utiliser les recommandations de cas

ScenarioFormats recommandés
Nouveaux services WebJSON
L’intégration PACSXML
HL7 médiévalXML
Les frontends de JavaScriptJSON
Les transformations XSLTXML
Les bases de données NoSQLJSON
Validation du schémaXML

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.

 Français