Cómo deserializar DICOM JSON de vuelta a Dataset o DicomFile

Cómo deserializar DICOM JSON de vuelta a Dataset o DicomFile

Este tutorial demuestra cómo deserializar DICOM JSON de vuelta a los objetos Dataset o DicomFile utilizando C#. Esta capacidad es esencial cuando necesita reconstruir los datos de DIKOM de J SON almacenados en bases de datos o recibidos de APIs web.

Beneficios de la deseriización JSON

    • Recuperación de datos *:- Recuperar archivos DICOM de JSON almacenados en bases de datos.
    • Integración de API:- Procesar los datos DICOM recibidos como JSON de los servicios web.
    • Procesamiento de circuitos de recorrido:- Serializar a JSON, modificar, luego deserializar de nuevo a DICOM.

Requisitos: Preparación del medio ambiente

  • Instalar Visual Studio o cualquier compatible .NET IDE.
  • Crea un nuevo proyecto de aplicación .NET 8 consola.
  • Instalar Aspose.Medical desde el NuGet Package Manager.

Comprender las opciones de deseriización

El DicomJsonSerializer proporciona diferentes métodos de deseriización:

MétodoInputsalidaUso de caso
DeserializeSíntomas JSONDataset?Un conjunto de datos de JSON
DeserializeFileSíntomas JSONDicomFile?Completa el archivo DICOM con meta info
DeserializeListSiguiente JSON array stringDataset[]?Múltiples conjuntos de datos de JSON array

Guía paso a paso para deserializar DICOM JSON

Paso 1: Instalar Aspose.Medical

Añade la biblioteca de Aspose.Medical a su proyecto utilizando NuGet.

Install-Package Aspose.Medical

Paso 2: Incluir los espacios de nombre necesarios

Añade las referencias a los espacios de nombre requeridos en su código.

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

Paso 3: Leer el contenido JSON

Leer el contenido JSON de un archivo o variable.

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

Paso 4: Deserializar a Dataset

Uso Deserialize para reconstruir un objeto de Dataset.

Dataset? dataset = DicomJsonSerializer.Deserialize(jsonText);

Paso 5: Trabajar con el Dataset

Acceso y manipulación del conjunto de datos reconstruido.

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

Paso 6: Salva de vuelta a DICOM (opcional)

Crea un nuevo DicomFile y salve en el disco.

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

Exemplo de código completo: Deserializar un conjunto de datos único

Aquí hay un ejemplo completo que demuestra cómo deserializar un único conjunto de datos:

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

Deserializar Complete DicomFile

Cuando su JSON incluye la información meta del archivo, utilice 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 a múltiples conjuntos de datos

Cuando trabajamos con JSON, los arrays contienen múltiples conjuntos de datos:

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

Exemplos de ruta redonda: Serializar, Modificar, Deserializar

Un caso de uso común es la modificación de los datos de DICOM a travé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");
}

Trabajar con el almacenamiento de bases de datos

Deserializar DICOM JSON obtenido de una base de datos:

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 aplicaciones web

Para las aplicaciones ASP.NET Core, utilice 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

Manejo malformado JSON

Siempre envuelve la deseriización en los bloques de prueba:

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

Tratamiento de JSON Truncated

Para los grandes archivos JSON, asegúrese de que el contenido completo se lee:

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

Versión Compatibilidad

Asegúrese de que el JSON se ha generado con una versión compatible del serializador. versiones incorrectas pueden causar fallos de deseriización.

Información adicional

  • Los conjuntos de datos deserializados no incluyen datos de píxeles a menos que estén incorporados en el original JSON.
  • Para el uso de la producción, implementar la validación adecuada de las entradas JSON antes de deserializar.
  • Considere el caching de los conjuntos de datos deserializados para los datos frecuentemente accesados.

Conclusión

Este tutorial ha demostrado cómo deserializar DICOM JSON de vuelta a los objetos Dataset o DicomFile en C# utilizando Aspose.Medical. Esta capacidad permite el procesamiento de datos de ruta y la integración sin fíos con los sistemas de almacenamiento y API basados en jSON.

 Español