Kā konvertēt DICOM uz XML un atpakaļ, izmantojot DicomXmlSerializer

Kā konvertēt DICOM uz XML un atpakaļ, izmantojot DicomXmlSerializer

Šis apmācība parāda, kā konvertēt DICOM failus XML formātā un deserializēt XML atpakaļ DIKOM, izmantojot C#. XML forma ir preferēts integrācijai ar mantojuma sistēmām, HL7 darba plūsmām un videi, kur XML rīki ir labi izveidoti.

Kad izmantot XML pār JSON

  • Legalitātes integrācija- Pastāvīgie middleware un sistēmas bieži sagaida XML formātu.

  • HL7 saderība- Veselības aprūpes sistēmas, izmantojot HL7 v2/v3, parasti darbojas ar XML.

    • XML rīku izmantošana:- Organizācijas ar izveidotu XSLT transformāciju un XPath pieprasījumu.
    • Programmas apstiprināšana *:- XML shēmas nodrošina stingras validācijas iespējas.

Priekšnoteikumi: Vides sagatavošana

  • Iestatīt Visual Studio vai jebkuru saderīgu .NET IDE.
  • Izveidojiet jaunu .NET 8 konsoles lietojumprogrammu projektu.
  • Instalējiet Aspose.Medical no NuGet Package Manager.

Pakāpeniski ceļvedis, kā konvertēt DICOM uz XML

1. solis: instalēt Aspose.Medical

Pievienojiet Aspose.Medicīnas bibliotēku savam projektam, izmantojot NuGet.

Install-Package Aspose.Medical

2. solis: Iekļaut nepieciešamos nosaukuma telpas

Pievienojiet atsauces uz pieprasītajiem nosaukuma telpām savā kodā.

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

3. solis: lejupielādēt DICOM failu

Lejupielādēt DICOM failu, kuru vēlaties konvertēt.

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

4. solis: Sērija uz XML

Izmantojiet DicomXmlSerializer.Serialize Metode, lai konvertētu XML.

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

5. solis: saglabāt XML iznākumu

Saglabājiet XML failu uzglabāšanai vai pārsūtīšanai.

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

6. solis: Deserializēt XML atpakaļ uz dataset

Lai konvertētu XML atpakaļ uz DICOM, izmantojiet Deserialize Metode ir.

Dataset? dataset = DicomXmlSerializer.Deserialize(xml);

Kompletā koda piemērs: DICOM uz XML konversiju

Šeit ir pilns piemērs, kā konvertēt DICOM uz 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");

Kompletā koda piemērs: XML uz DICOM konversiju

Šeit ir pilns piemērs, kā pārvērst XML atpakaļ 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.");
}

Rond-Trip piemērs: DICOM → XML → DIKOM

Pilnīga apkārtējā pārveide, kas pierāda datu integritāti:

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

Piemērs XML iznākuma struktūra

XML iznākums pārstāv DICOM etiķetes strukturētā formātā:

<?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 un XML iznākumu salīdzinājums

lieluma salīdzinājums

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

Izmantojiet gadījumu ieteikumus

ScenarioIeteicamā formāta
Jauni tīmekļa pakalpojumiJSON
PACS integrācijaXML
HL7 vidējiXML
JavaScript priekšrocībasJSON
XSLT transformācijasXML
NoSQL datu bāzeJSON
Programmas validācijaXML

Integrācija ar mantojuma sistēmām

Piemērs integrācija ar mantojumu 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

Neatbilstoša XML apstrāde

Wrap deserialization in try-catch for kļūdu apstrāde:

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

Personības kodēšanas problēmas

Pārliecinieties par pareizu kodēšanu, lasot/rakstot 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();
}

Liela faila apstrāde

Par ļoti lieliem DICOM failiem, apsveriet streamu:

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

Papildu informācija

  • XML formāts nodrošina labāku cilvēka lasamību ar pareizu indentāciju.
  • XML ir vairāk verbas nekā JSON, kas izraisa lielāku failu izmēru.
  • Apsveriet kompresiju, lai uzglabātu vai nosūtītu lielus XML failus.
  • Gan JSON, gan XML atbalsta tos pašus DICOM datu veidus un struktūras.

Conclusion

Šī apmācība ir parādījusi, kā konvertēt DICOM failus XML formātā un deserializēt XML atpakaļ DIKOM C#, izmantojot Aspose.Medical.XML serializācija ir svarīga integrācijai ar mantinieku veselības aprūpes sistēmām un videi, kas balstās uz XML rīku un darba plūsmu.

 Latviski