Como deserializar DICOM JSON de volta para Dataset ou DicomFile

Como deserializar DICOM JSON de volta para Dataset ou DicomFile

Este tutorial demonstra como deserializar o DICOM JSON de volta aos Objetos Dataset ou DicomFile usando C#. Esta capacidade é essencial quando você precisa reconstruir os dados do DIKOM a partir de J SON armazenados em bases de dados ou recebidos de APIs web.

Benefícios da desertificação JSON

    • Recuperação de dados *:- Recuperar arquivos DICOM de JSON armazenados em bases de dados.
  • • Integração API:- Processar DICOM dados recebidos como JSON de serviços web.

    • Processamento de rodovias *:- Serialize para JSON, modifique, depois deserialize de volta para DICOM.

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.

Compreender as opções de desertificação

O DicomJsonSerializer fornece diferentes métodos de desertificação:

MétodoInputsaídaUsando Caso
DeserializeTítulo JSON StringDataset?Um conjunto de dados do JSON
DeserializeFileTítulo JSON StringDicomFile?Complete arquivo DICOM com meta info
DeserializeListJSON em Array StringDataset[]?Múltiplos conjuntos de dados da JSON array

Guia passo a passo para deserializar DICOM JSON

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: Leia o conteúdo JSON

Leia o conteúdo JSON de um arquivo ou variável.

string jsonText = File.ReadAllText("patient_scan.json");

Passo 4: Deserializar para Dataset

Utilização Deserialize para reconstruir um objeto do Dataset.

Dataset? dataset = DicomJsonSerializer.Deserialize(jsonText);

Passo 5: Trabalhar com o Dataset

Acesso e manipulação do conjunto de dados reconstruído.

if (dataset != null)
{
    Console.WriteLine("Dataset successfully reconstructed from JSON.");
    // Work with the dataset...
}

Passo 6: Save Back to DICOM (Opcional)

Crie um novo DicomFile e salve para o disco.

if (dataset != null)
{
    DicomFile newDcm = new DicomFile(dataset);
    newDcm.Save("reconstructed.dcm");
}

Exemplo de código completo: Deserializar um conjunto de dados único

Aqui está um exemplo completo mostrando como deserializar um único conjunto de dados:

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

// Read JSON from file
string jsonText = File.ReadAllText("patient_scan.json");

// Deserialize to Dataset
Dataset? dataset = DicomJsonSerializer.Deserialize(jsonText);

if (dataset != null)
{
    Console.WriteLine("Dataset successfully deserialized!");
    
    // Create a new DicomFile with the dataset
    DicomFile newDcm = new DicomFile(dataset);
    
    // Save to DICOM format
    newDcm.Save("reconstructed_scan.dcm");
    Console.WriteLine("Saved to reconstructed_scan.dcm");
}
else
{
    Console.WriteLine("Failed to deserialize JSON.");
}

Desertificação Complete DicomFile

Quando o seu JSON inclui metadados de arquivo, use DeserializeFile:

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

// Read JSON that includes file meta information
string jsonFileText = File.ReadAllText("complete_dicom.json");

// Deserialize to complete DicomFile
DicomFile? dicomFile = DicomJsonSerializer.DeserializeFile(jsonFileText);

if (dicomFile != null)
{
    Console.WriteLine("DicomFile successfully deserialized!");
    dicomFile.Save("reconstructed_complete.dcm");
}

Deserializar JSON Array para múltiplos conjuntos de dados

Ao trabalhar com JSON, os arredores contêm vários conjuntos de dados:

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

// Read JSON array
string jsonArrayText = File.ReadAllText("multiple_studies.json");

// Deserialize to Dataset array
Dataset[]? datasets = DicomJsonSerializer.DeserializeList(jsonArrayText);

if (datasets != null)
{
    Console.WriteLine($"Deserialized {datasets.Length} datasets.");
    
    // Save each dataset as a separate DICOM file
    for (int i = 0; i < datasets.Length; i++)
    {
        DicomFile dcm = new DicomFile(datasets[i]);
        dcm.Save($"study_{i:D3}.dcm");
    }
    
    Console.WriteLine("All datasets saved successfully!");
}

Round-Trip Exemplo: Serializar, Modificar, Deserializar

Um caso de uso comum é a modificação de dados DICOM através de JSON:

using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
using System.Text.Json;

// Load original DICOM file
DicomFile original = DicomFile.Open("original.dcm");

// Serialize to JSON
string json = DicomJsonSerializer.Serialize(original, writeIndented: true);

// Parse JSON for modification (using System.Text.Json)
using JsonDocument doc = JsonDocument.Parse(json);
// ... modify JSON as needed ...

// Deserialize back to Dataset
Dataset? modifiedDataset = DicomJsonSerializer.Deserialize(json);

if (modifiedDataset != null)
{
    DicomFile modifiedDcm = new DicomFile(modifiedDataset);
    modifiedDcm.Save("modified.dcm");
}

Trabalhar com o armazenamento de banco de dados

Deserialize DICOM JSON extraído de uma base de dados:

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

// Simulating retrieval from database
string jsonFromDatabase = GetDicomJsonFromDatabase("patient_123");

Dataset? dataset = DicomJsonSerializer.Deserialize(jsonFromDatabase);

if (dataset != null)
{
    // Process the reconstructed dataset
    DicomFile dcm = new DicomFile(dataset);
    dcm.Save("from_database.dcm");
    Console.WriteLine("DICOM file reconstructed from database JSON.");
}

// Simulated database retrieval method
string GetDicomJsonFromDatabase(string patientId)
{
    // In real implementation, this would query your database
    return File.ReadAllText($"database_cache/{patientId}.json");
}

Async Deserialization para Aplicações Web

Para aplicações ASP.NET Core, use métodos async:

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

// Async deserialization from stream
public async Task<Dataset?> DeserializeFromStreamAsync(Stream jsonStream)
{
    Dataset? dataset = await DicomJsonSerializer.DeserializeAsync(jsonStream);
    return dataset;
}

// Usage in ASP.NET Core controller
[HttpPost("import")]
public async Task<IActionResult> ImportDicomJson()
{
    Dataset? dataset = await DicomJsonSerializer.DeserializeAsync(Request.Body);
    
    if (dataset != null)
    {
        // Process the dataset
        return Ok("DICOM data imported successfully");
    }
    
    return BadRequest("Invalid DICOM JSON");
}

Troubleshooting

Tratamento de JSON Malformado

Sempre envolva a deserialização em blocos de tentativa:

try
{
    Dataset? dataset = DicomJsonSerializer.Deserialize(jsonText);
    if (dataset == null)
    {
        Console.WriteLine("Deserialization returned null - check JSON format.");
    }
}
catch (JsonException ex)
{
    Console.WriteLine($"JSON parsing error: {ex.Message}");
}
catch (Exception ex)
{
    Console.WriteLine($"Deserialization error: {ex.Message}");
}

Comportamento Truncado JSON

Para grandes arquivos JSON, certifique-se de que o conteúdo completo é lido:

// Use ReadAllText for complete file content
string completeJson = File.ReadAllText("large_dicom.json");

// Verify JSON is complete (basic check)
if (!completeJson.TrimEnd().EndsWith("}") && !completeJson.TrimEnd().EndsWith("]"))
{
    Console.WriteLine("Warning: JSON may be truncated.");
}

Versão Compatibilidade

Certifique-se de que o JSON foi gerado com uma versão compatível do serializador. versões incorretas podem causar falhas de deserializar.

Informações adicionais

  • Os conjuntos de dados deserializados não incluem dados de pixel, a menos que estejam incorporados no original JSON.
  • Para uso de produção, implementar a validação adequada da entrada JSON antes da desertificação.
  • Considere caching conjuntos de dados deserializados para dados frequentemente acessados.

Conclusão

Este tutorial demonstrou como deserializar DICOM JSON de volta para Dataset ou Objetos DicomFile em C# usando Aspose.Medical. Esta capacidade permite o processamento de dados de rotação e integração sem fio com os sistemas de armazenamento e API baseados em jSON.

 Português