Hur man konverterar DICOM till XML och tillbaka med DicomXmlSerializer

Hur man konverterar DICOM till XML och tillbaka med DicomXmlSerializer

Denna tutorial visar hur man konverterar DICOM-filer till XML-format och deserialiserar XML tillbaka till C#. XML formatet är föredraget för integration med arvssystem, HL7 arbetsflöden och miljöer där XML verktyg är väl etablerade.

När ska man använda XML över JSON

    • Lagstiftning om integration *:- Existerande middleware och system förväntar sig ofta XML-format.
  • HL7 Kompatibilitet- Hälso- och sjukvårdssystem som använder HL7 v2/v3 fungerar vanligtvis med XML.

  • *XML verktyg *:- Organisationer med etablerade XSLT-transformer och XPath-frågor.

    • Validering av schema*- XML-scheman ger strikta valideringsförmågor.

Förutsättningar: Förbereda miljön

  • Installera Visual Studio eller någon kompatibel .NET IDE.
  • Skapa ett nytt .NET 8 konsolprogram.
  • Installera Aspose.Medical från NuGet Package Manager.

Steg för steg guide för att konvertera DICOM till XML

Steg 1: Installera Aspose.Medical

Lägg till Aspose.Medicinska biblioteket till ditt projekt med NuGet.

Install-Package Aspose.Medical

Steg 2: Inkludera nödvändiga namnutrymmen

Lägg till hänvisningar till de nödvändiga namnutrymmenna i koden.

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

Steg 3: Ladda upp DICOM-filen

Ladda upp DICOM-filen du vill konvertera.

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

Steg 4: Serialisera till XML

Använd den DicomXmlSerializer.Serialize Metod för att konvertera till XML.

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

Steg 5: Spara XML-utgången

Spara XML till en fil för lagring eller överföring.

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

Steg 6: Deserialisera XML tillbaka till Dataset

För att konvertera XML tillbaka till DICOM, använd Deserialize Metoden är.

Dataset? dataset = DicomXmlSerializer.Deserialize(xml);

Komplett kod Exempel: DICOM till XML Conversion

Här är ett komplett exempel på omvandling av DICOM till 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 kod Exempel: XML till DICOM konvertering

Här är ett komplett exempel på omvandling av XML tillbaka till 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 Exempel: DICOM → XML → DIKOM

Fullständig omvandling som visar dataintegritet:

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

Exempel på XML utgångsstruktur

XML-utgången representerar DICOM-taggar i ett strukturerat 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 jämförelse

Stora jämförelser

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

Använd Case Recommendations

ScenarioRekommenderat format
Nya webbtjänsterJSON
Legacy PACS integrationXML
HL7 medelvärdeXML
JavaScript frontendorJSON
XSLT omvandlingarXML
NoSQL databaserJSON
Schema ValideringXML

Integration med legacy system

Exempel integration med 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

Handling av invalid XML

Wrap deserialization i try-catch för felhantering:

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

Karaktär kodning problem

Se till att korrekt kodning görs när du läser / skriver XML-filer:

// 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();
}

Stora filhantering

För mycket stora DICOM-filer, överväga 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);
}

Ytterligare information

  • XML-format ger bättre mänsklig läsbarhet med rätt indentation.
  • XML är mer verbos än JSON, vilket resulterar i större filstorlekar.
  • Tänk på kompression för lagring eller överföring av stora XML-filer.
  • Både JSON och XML stöder samma DICOM-datatyper och strukturer.

slutsatser

Denna tutorial har visat hur man konverterar DICOM-filer till XML-format och deserialiserar XML tillbaka till DicOM i C# med hjälp av Aspose.Medical.XML serialisering är nödvändig för att integrera med arvade hälso- och sjukvårdssystem och miljöer som förlitar sig på XML verktyg och arbetsflöden.

 Svenska