Miten muuntaa DICOM XML ja Takaisin käyttäen DicomXmlSerializer

Miten muuntaa DICOM XML ja Takaisin käyttäen DicomXmlSerializer

Tämä opetusohjelma osoittaa, miten muuntaa DICOM-tiedostoja XML-muodossa ja deserialisoi XML takaisin C#: n avulla. XML -muoto on mieluummin integroitua perintöjärjestelmiin, HL7-työvälineisiin ja ympäristöihin, joissa XML työkalu on hyvin vakiintunut.

Milloin käyttää XML:tä JSONin kautta

    • Lainsäädäntöön liittyvät toimenpiteet*- Nykyiset media ja järjestelmät odottavat usein XML-muotoa.
  • *HL7 yhteensopivuus- Terveydenhuollon järjestelmät käyttävät HL7 v2/v3 tyypillisesti XML: n kanssa.

    • XML työkalut *- Organisaatiot, joilla on asetetut XSLT-muunnokset ja XPath-kysymykset.
    • Ohjelman vahvistaminen *- XML-järjestelmät tarjoavat tiukkoja validointiominaisuuksia.

Edellytykset: Ympäristön valmistelu

  • Aseta Visual Studio tai yhteensopiva .NET IDE.
  • Luo uusi .NET 8 -konsolin sovellusprojekti.
  • Asenna Aspose.Medical NuGet Package Managerista.

Vaiheittainen opas DICOM: n muuntamiseen XML:een

Vaihe 1: Asenna Aspose.Medical

Lisää Aspose.Medical -kirjasto projektillesi NuGetin avulla.

Install-Package Aspose.Medical

Vaihe 2: Sisällytä tarvittavat nimet

Lisää viittauksia vaadittuihin nimipaikkoihin koodissasi.

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

Vaihe 3: Lataa DICOM-tiedosto

Lataa DICOM-tiedosto, jonka haluat muuntaa.

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

Vaihe 4: Serioi XML

Käytä sitä DicomXmlSerializer.Serialize muuntaminen XML:een.

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

Vaihe 5: Tallenna XML-lähde

Tallenna XML tiedostoon tallennukseen tai siirtoon.

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

Vaihe 6: Deserialize XML Back to Dataset

Jos haluat muuntaa XML takaisin DICOMiin, käytä Deserialize ja menetelmä.

Dataset? dataset = DicomXmlSerializer.Deserialize(xml);

Täydellinen koodin esimerkki: DICOM XML-muuntaminen

Tässä on täydellinen esimerkki DICOMin muuntamisesta 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");

Täydellinen koodin esimerkki: XML to DICOM Conversion

Tässä on täydellinen esimerkki XML: n kääntämisestä takaisin DICOMiin:

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

Esimerkki: DICOM → XML → DIKOM

Täydellinen pyöreä kierroksinen muuntaminen, joka osoittaa tietojen eheyden:

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

Esimerkki XML-lähteen rakenne

XML-lähde edustaa DICOM-merkintöjä strukturoidussa muodossa:

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

Vertailu JSON vs XML Output

Suuret vertailut

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

Käytä tapauksen suosituksia

ScenarioSuositeltu muoto
Uusia verkkopalvelujaJSON
Perinnöllinen PACS-integrointiXML
HL7 keskiarvoXML
JavaScript frontenditJSON
XSLT muutoksetXML
NoSQL tietokannatJSON
Järjestelmän validointiXML

Yhteistyö perintöjärjestelmien kanssa

Esimerkki yhdentymisestä perinnölliseen 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

Käyttöoikeudenmukainen XML

Wrap deserialization in try-catch virheen käsittelyyn:

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

Luonne koodaan ongelmia

Varmista asianmukainen koodaus lukemalla / kirjoittamalla XML-tiedostoja:

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

Suuri tiedostojen käsittely

Erittäin suurille DICOM-tiedostoille harkitse 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);
}

Lisätietoja

  • XML-muoto tarjoaa parempaa ihmisluettavuutta asianmukaisella indentaatiolla.
  • XML on enemmän verboosia kuin JSON, mikä johtaa suurempaan tiedostokoon.
  • Harkitse kompressiota suurien XML-tiedostojen tallentamiseen tai lähettämiseen.
  • Sekä JSON että XML tukevat samoja DICOM-tietotyyppejä ja rakenteita.

johtopäätöksiä

Tämä opetusohjelma on osoittanut, miten muuntaa DICOM-tiedostoja XML-muodossa ja deserialisoi XML:tä takaisin C#: ssä käyttämällä Aspose.Medical.XML-seriointi on välttämätöntä integroimiseksi perinnöllisiin terveydenhuoltojärjestelmiin ja ympäristöihin, jotka perustuvat XML -työkaluihin ja työnkulkuihin.

 Suomi