Hvordan man konverterer DICOM til XML og tilbage ved hjælp af DicomXmlSerializer

Hvordan man konverterer DICOM til XML og tilbage ved hjælp af DicomXmlSerializer

Denne tutorial viser, hvordan man konverterer DICOM-filer til XML-format og deserialiserer XML tilbage til DIKOM ved hjælp af C#. XML format er foretrukket til integration med arvssystemer, HL7 arbejdstrømme, og miljøer hvor XML værktøjer er godt etableret.

Når skal du bruge XML over JSON

  • *Legacy Integration er:- De eksisterende middleware og systemer forventer ofte XML-format.

  • HL7 Kompatibilitet:- Sundhedssystemer, der bruger HL7 v2/v3, arbejder typisk med XML.

  • • XML værktøj:- Organisationer med etablerede XSLT transforms og XPath queries.

    • Skema Validation *:- XML-skemaer giver strenge valideringsmuligheder.

Forside: Forberedelse af miljøet

  • Indstill Visual Studio eller ethvert kompatibelt .NET IDE.
  • Skab et nyt .NET 8 applikationsprojekt.
  • Installere Aspose.Medical fra NuGet Package Manager.

Step-by-Step Guide til at konvertere DICOM til XML

Trin 1: Installation af Aspose.Medical

Tilføj Aspose.Medicinsk bibliotek til dit projekt ved hjælp af NuGet.

Install-Package Aspose.Medical

Trin 2: Indtast de nødvendige navneområder

Tilføj henvisninger til de krævede navneområder i din kode.

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

Trin 3: Last ned DICOM-filen

Download den DICOM-fil, du ønsker at konvertere.

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

Trin 4: Serialiser til XML

Brug den DicomXmlSerializer.Serialize Metode til konvertering til XML.

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

Trin 5: Beskytt XML-udgang

Spare XML til en fil til opbevaring eller overførsel.

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

Trin 6: Deserialiser XML tilbage til Dataset

For at konvertere XML tilbage til DICOM, skal du bruge Deserialize Den metode.

Dataset? dataset = DicomXmlSerializer.Deserialize(xml);

Komplet kode Eksempel: DICOM til XML konvertering

Her er et komplet eksempel på konvertering af DICOM til 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");

Eksempel på koden: XML til DICOM konvertering

Her er et komplet eksempel på konvertering af XML tilbage til 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.");
}

Eksempel: DICOM → XML → DIKOM

Den komplette rund-trip konvertering, der demonstrerer 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");
}

Eksempel på XML udgangsstruktur

XML-udgang repræsenterer DICOM-tag i et struktureret 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>

Sammenligning af JSON vs XML Output

Størrelse sammenligning

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

Brug af saganbefalinger

ScenarioDet anbefalede format
Nye webtjenesterJSON
Legacy PACS integrationXML
HL7 mellemliggendeXML
JavaScript frontendsJSON
XSLT omdannelserXML
NoSQL databaserJSON
Validering af ordningenXML

Integration med Legacy-systemer

Eksempel 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

Behandling af Invalid XML

Wrap deserialization i try-catch for fejlbehandling:

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

Karakter koder spørgsmål

Sørg for korrekt kodning, 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();
}

Store filer håndtering

For meget store DICOM filer, overveje 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);
}

Yderligere information

  • XML-format giver bedre menneskelig læsbarhed med korrekt indentation.
  • XML er mere verbøs end JSON, hvilket resulterer i større filstørrelser.
  • Overvej kompression til opbevaring eller overførsel af store XML-filer.
  • Både JSON og XML understøtter de samme DICOM-datatyper og strukturer.

Konklusion

Denne tutorial har vist, hvordan man konverterer DICOM-filer til XML-format og deserialiserer XML tilbage til DIKOM i C# ved hjælp af Aspose.Medical.

 Dansk