Cum să convertiți DICOM în XML și înapoi folosind DicomXmlSerializator

Cum să convertiți DICOM în XML și înapoi folosind DicomXmlSerializator

Acest tutorial demonstrează cum să convertiți fișierele DICOM în format XML și să deserializeze XML înapoi la C#. formatul XML este preferat pentru integrarea cu sistemele de moștenire, fluxurile de lucru HL7 și mediile în care instrumentele XML sunt bine stabilite.

Când să utilizați XML pe JSON

    • Integrație legală *:- Sistemele și mijloacele existente așteaptă adesea format XML.
  • ** Compatibilitate cu HL7**:- Sistemele de îngrijire a sănătății folosind HL7 v2/v3 funcționează de obicei cu XML.

  • Cuvânt cheie: XML Tooling- Organizații cu transformări XSLT stabilite și întrebări XPath.

  • • Validarea schemei:- Schemele XML oferă capacități stricte de validare.

Etichetă: pregătirea mediului

  • Instalați Visual Studio sau orice IDE compatibil .NET.
  • Creați un nou proiect de aplicații .NET 8 console.
  • Instalați Aspose.Medical de la NuGet Package Manager.

Ghidul pas cu pas pentru a converti DICOM în XML

Pasul 1: Instalați Aspose.Medical

Adăugați biblioteca Aspose.Medical la proiectul dvs. folosind NuGet.

Install-Package Aspose.Medical

Pasul 2: Includeți spațiile de nume necesare

Adăugați referințe la spațiile de nume necesare în codul dvs.

using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;

Pasul 3: Încărcați fișierul DICOM

Încărcați fișierul DICOM pe care doriți să-l convertiți.

DicomFile dcm = DicomFile.Open("patient_scan.dcm");

Pasul 4: Serializarea la XML

Foloseşte-l pe DicomXmlSerializer.Serialize Metoda de conversie în XML.

string xml = DicomXmlSerializer.Serialize(dcm.Dataset);

Pasul 5: Salvați rezultatul XML

Salvați XML într-un fișier pentru stocare sau transmisie.

File.WriteAllText("patient_scan.xml", xml);

Pasul 6: Deserializarea XML înapoi la Dataset

Pentru a converti XML în DICOM, utilizați Deserialize metodă.

Dataset? dataset = DicomXmlSerializer.Deserialize(xml);

Exemplu complet de cod: DICOM în XML Conversion

Iată un exemplu complet de conversie DICOM în 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");

Exemplu complet de cod: XML în DICOM Conversion

Iată un exemplu complet pentru conversia XML înapoi la 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.");
}

Cuvânt cheie: DICOM → XML → DIKOM

Conversia completă rotundă demonstrează integritatea datelor:

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");
}

Exemplul structurii de ieșire XML

Rezultatul XML reprezintă etichetele DICOM într-un format structurat:

<?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>

Compararea rezultatelor JSON/XML

Dimensiune comparativă

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

Recomandări pentru cazuri

ScenarioFormatul recomandat
Noile servicii webJSON
Integrarea PACSXML
HL7 mijlociiXML
Cuvânt cheie JavaScript frontendsJSON
Transformarea XSLTXML
NoSQL bază de dateJSON
Validarea schemeiXML

Integrație cu sistemele Legacy

Exemple de integrare cu 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

Gestionarea XML invalidă

Încărcați deserializarea în try-catch pentru gestionarea erorilor:

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}");
}

Caracter codificarea problemelor

Asigurați-vă că codificarea corectă atunci când citiți / scrieți fișierele 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();
}

prelucrarea fișierelor mari

Pentru fișierele DICOM foarte mari, luați în 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);
}

Informații suplimentare

  • Formatul XML oferă o mai bună readabilitate umană cu indentația corespunzătoare.
  • XML este mai verbos decât JSON, ceea ce duce la dimensiuni mai mari de fișiere.
  • Considerați compresia pentru stocarea sau transmiterea fișierelor XML mari.
  • Amândouă JSON și XML susțin aceleași tipuri de date și structuri DICOM.

concluziile

Acest tutorial a arătat cum să convertiți fișierele DICOM în format XML și să deserializeze XML înapoi în C# folosind Aspose.Medical. serializarea XML este esențială pentru integrarea cu sistemele de sănătate moștenite și mediile care se bazează pe XML tooling și fluxurile de lucru.

 Română