Como converter DICOM para XML e Back usando DicomXmlSerializer

Como converter DICOM para XML e Back usando DicomXmlSerializer

Este tutorial demonstra como converter arquivos DICOM para o formato XML e deserializar o XML de volta para DicOM usando C#. Formato XML é preferido para integração com sistemas de herança, fluxos de trabalho HL7 e ambientes onde a ferramenta XML está bem estabelecida.

Quando usar XML sobre JSON

  • • Integração Legatória:- Os softwares e sistemas existentes geralmente esperam o formato XML.

  • *H7 Compatibilidade- Os sistemas de saúde que usam HL7 v2/v3 normalmente funcionam com XML.

    • A ferramenta XML é:- Organizações com transformações XSLT e perguntas XPath estabelecidas.
    • Validação do Plano *:- Os esquemas XML fornecem capacidades de validação rigorosas.

Título: Preparando o Meio Ambiente

  • Instale o Visual Studio ou qualquer .NET IDE compatível.
  • Crie um novo projeto de aplicação .NET 8 console.
  • Instale Aspose.Medical do NuGet Package Manager.

Guia passo a passo para converter DICOM para XML

Passo 1: Instalar Aspose.Medical

Adicione a Aspose.Medical Library ao seu projeto usando NuGet.

Install-Package Aspose.Medical

Passo 2: Incluir os espaços de nome necessários

Adicione referências aos espaços de nomes necessários em seu código.

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

Passo 3: Carregar o arquivo DICOM

Carregue o arquivo DICOM que você deseja converter.

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

Passo 4: Serialize para XML

Use o DicomXmlSerializer.Serialize Método de conversão para XML.

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

Passo 5: Salve a saída XML

Salve o XML para um arquivo para armazenamento ou transmissão.

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

Passo 6: Deserialize o XML de volta ao Dataset

Para converter XML de volta para DICOM, use o Deserialize do método.

Dataset? dataset = DicomXmlSerializer.Deserialize(xml);

Exemplo de código completo: conversão de DICOM para XML

Aqui está um exemplo completo de conversão de DICOM para 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");

Exemplo de código completo: conversão XML para DICOM

Aqui está um exemplo completo de conversão de XML para 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.");
}

Exemplo: DICOM → XML → DIKOM

Conversão completa rodada que demonstra integridade de dados:

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

Estrutura de saída XML

A saída XML representa as tags DICOM em um formato estruturado:

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

Comparação de JSON vs XML Output

tamanho comparação

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

Recomendações de caso

ScenarioFormato recomendado
Novos Serviços WebJSON
Integração PACSO XML
HL7 MédicosO XML
Avaliações JavaScript frontendsJSON
Transformações XSLTO XML
NoSQL Base de DadosJSON
Validação do esquemaO XML

Integração com Sistemas de Legacy

Exemplo de integração com herança 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

Manejo de XML Invalido

Inserir a desertificação no try-catch para o tratamento de erros:

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

Caracterização de Problemas

Assegurar a codificação correta ao ler/escrever arquivos XML:

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

Manutenção de arquivos grandes

Para arquivos DICOM muito grandes, considere 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);
}

Informações adicionais

  • O formato XML fornece uma melhor leitura humana com indentação adequada.
  • O XML é mais verbo do que o JSON, resultando em tamanhos de arquivo maiores.
  • Considere a compressão para armazenar ou transmitir grandes arquivos XML.
  • Tanto o JSON quanto o XML suportam os mesmos tipos e estruturas de dados DICOM.

Conclusão

Este tutorial demonstrou como converter arquivos DICOM para o formato XML e deserializar XML de volta para DicOM em C# usando Aspose.Medical. a serialização XML é essencial para a integração com sistemas de saúde hereditários e ambientes que dependem da ferramenta e fluxos de trabalho XML.

 Português