Kaip konvertuoti DICOM į XML ir atgal naudojant DicomXmlSerializer

Kaip konvertuoti DICOM į XML ir atgal naudojant DicomXmlSerializer

Šis mokymas rodo, kaip konvertuoti DICOM failus į XML formatą ir deserializuoti XML atgal į DIKOM naudojant C#. XML formatas yra pageidautina integracijai su paveldimo sistemomis, HL7 darbo srautais ir aplinka, kurioje XML įrankiai yra gerai nustatyta.

Kada naudoti XML per JSON

    • Įstatymo nuostatų įgyvendinimas:- Esami vidurinės programinės įrangos ir sistemos dažnai laukia XML formato.
  • HL7 suderinamumas- Sveikatos priežiūros sistemos, naudojančios HL7 v2/v3, paprastai veikia su XML.

  • • XML įrankiai:- Organizacijos su įsteigtomis XSLT transformacijomis ir XPath užklausomis.

    • Programos patvirtinimas *:- XML schemos suteikia griežtas patvirtinimo galimybes.

Žymos archyvas: paruošti aplinką

  • Įdiegti „Visual Studio“ arba bet kokį suderinamą .NET IDE.
  • Sukurkite naują .NET 8 konsolės programos projektą.
  • Įdiegti Aspose.Medical iš NuGet paketų valdytojo.

Žingsnis po žingsnio vadovas konvertuoti DICOM į XML

1 žingsnis: įdiegti Aspose.Medical

Pridėti Aspose.Medicinos biblioteką į savo projektą naudojant NuGet.

Install-Package Aspose.Medical

2 žingsnis: įtraukti reikiamus pavadinimų erdves

Įveskite nuorodas į reikalingą vardų erdvę savo kodo.

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

3 žingsnis: atsisiųskite DICOM failą

Atsisiųskite DICOM failą, kurį norite konvertuoti.

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

4 žingsnis: Serializuoti į XML

Naudokite jį DicomXmlSerializer.Serialize Metodas konvertuoti į XML.

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

5 žingsnis: išsaugoti XML ištrauką

Išsaugokite XML į failą saugojimui ar perdavimui.

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

6 žingsnis: Deserializuokite XML atgal į duomenų rinkinį

Norėdami konvertuoti XML atgal į DICOM, naudokite Deserialize ir metodą.

Dataset? dataset = DicomXmlSerializer.Deserialize(xml);

Išsamus kodo pavyzdys: DICOM į XML konvertavimas

Štai pilnas pavyzdys, kaip konvertuoti 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");

Išsamus kodo pavyzdys: XML į DICOM konvertavimas

Štai pilnas pavyzdys, kaip konvertuoti XML atgal į 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.");
}

Žymos archyvas: DICOM, XML

Visiškas apvalios krypties konvertavimas, demonstruojantis duomenų vientisumą:

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

XML išleidimo struktūra

XML išleidimas atstovauja DICOM žymes struktūrizuota forma:

<?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 ir XML išleidimo palyginimas

dydis palyginimas

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

Naudokite atvejų rekomendacijas

ScenarioRekomenduojamas formatas
Naujos interneto paslaugosJSON
PACS integracijaXML žymės
HL7 vidutinio dydžioXML žymės
„JavaScript“ frontendaiJSON
XSLT transformacijosXML žymės
NoSQL duomenų bazėsJSON
Validacijos schemaXML žymės

Integracija su paveldėjimo sistemomis

Pavyzdžiui, integracija su paveldėjimo 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

Neįgaliųjų XML tvarkymas

Įveskite deserializavimą try-catch klaidų tvarkymui:

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

Kūrybiškumo kodavimo problemos

Užtikrinti tinkamą kodavimą skaitymo / rašymo XML failus:

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

Didelis failų tvarkymas

Dėl labai didelių DICOM failų, apsvarstykite 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);
}

Papildoma informacija

  • XML formatas suteikia geresnį žmogiškumą su tinkamu indentavimu.
  • XML yra daugiau verbo nei JSON, todėl didesnis failų dydis.
  • Apsvarstykite kompresiją, kad būtų galima saugoti arba perduoti didelius XML failus.
  • JSON ir XML palaiko tuos pačius DICOM duomenų tipus ir struktūras.

Conclusion

Šis mokymas parodė, kaip konvertuoti DICOM failus į XML formatą ir deserializuoti XML atgal į C# naudojant Aspose.Medical.XML serializavimas yra būtinas integracijai su paveldimos sveikatos priežiūros sistemomis ir aplinkais, kurie priklauso nuo XML įrankių ir darbo srautų.

 Lietuvių