Com deserialitzar DICOM JSON de tornada a Dataset o DicomFile

Com deserialitzar DICOM JSON de tornada a Dataset o DicomFile

Aquest tutorial demostra com deserialitzar DICOM JSON de tornada a Dataset o Objectes DicomFile utilitzant C#. Aquesta capacitat és essencial quan cal reconstruir les dades d’ADCOM des de jSON emmagatzemades en bases de dades o rebudes de les APIs web.

Beneficis de la deserialització JSON

    • Recuperació de dades *:- Recuperar arxius DICOM de JSON emmagatzemats en bases de dades.
    • Integració API *:- Processar DICOM dades rebudes com a JSON dels serveis web.
    • Tractament de la ruta *:- Serialitza’t a JSON, modifiqui, després deserialitzi tornant a DICOM.

Previsió: Preparar el medi ambient

  • Instal·lació de Visual Studio o qualsevol compatible .NET IDE.
  • Crear un nou projecte d’aplicació .NET 8 consola.
  • Instal·la Aspose.Medical des del NuGet Package Manager.

Comprendre les opcions de deserialització

El DicomJsonSerializer proporciona diferents mètodes de deserialització:

MethodInputSortidaÚs de cas
DeserializeXerrada JSONDataset?Un conjunt de dades de JSON
DeserializeFileXerrada JSONDicomFile?Completeu el fitxer DICOM amb meta info
DeserializeListJSON Array en líniaDataset[]?Múltiples set de dades de JSON array

Guia de pas a pas per deserialitzar DICOM JSON

Pas 1: Instal·lació Aspose.Medical

Afegeix la biblioteca d’Aspose.Medical al teu projecte utilitzant NuGet.

Install-Package Aspose.Medical

Pas 2: Incloure els espais de nom necessaris

Afegeix referències als espais de nom requerits en el teu codi.

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

Pas 3: Llegir el contingut JSON

Llegeix el contingut JSON d’un fitxer o variable.

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

Pas 4: Deserialitzar a Dataset

Use Deserialize per reconstruir un objecte de Dataset.

Dataset? dataset = DicomJsonSerializer.Deserialize(jsonText);

Pas 5: Treballar amb el Dataset

Accés i manipulació del conjunt de dades reconstruït.

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

Pas 6: Save Back to DICOM (opcional)

Crea un nou DicomFile i salva al disc.

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

Exemple de codi complet: Deserialitzar un conjunt de dades únic

Aquí teniu un exemple complet que demostra com deserialitzar un sol conjunt de dades:

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

Deserialitzar Complete DicomFile

Quan el vostre JSON inclou la informació metà del fitxer, utilitzeu 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");
}

Deserialitzar JSON Array a múltiples set de dades

Quan es treballa amb JSON s’arreglen que contenen múltiples set de dades:

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

Exemple de ruta rodona: serialitzar, modificar, deserialitzar

Un cas d’ús comú és modificar les dades 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");
}

Treballant amb l’emmagatzematge de bases de dades

Deserialitzar DICOM JSON recuperat d’una base de dades:

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 Deserialització per a aplicacions web

Per a les aplicacions ASP.NET Core, utilitzeu mètodes 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

Tractament de malformació JSON

Sempre envolta la deserialització en els blocs de triat:

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

Tractament Truncated JSON

Per a grans arxius JSON, assegureu-vos que el contingut complet es llegeix:

// 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ó de compatibilitat

Assegureu-vos que el JSON s’ha generat amb una versió compatible del serialitzador. Versions incorrectes poden causar fallades de deserialització.

Informació addicional

  • Els set de dades deserialitzats no inclouen dades de píxels llevat que s’hagi incorporat a l’original JSON.
  • Per a l’ús de producció, implementar la validació adequada de les entrades JSON abans de la deserialització.
  • Considera caching set de dades deserialitzades per a dades freqüentment accedides.

Conclusió

Aquest tutorial ha demostrat com deserialitzar DICOM JSON de tornada a Dataset o Objectes DicomFile en C# utilitzant Aspose.Medical. Aquesta capacitat permet el tractament de dades de ronda i la integració sense segell amb els sistemes d’emmagatzematge i API basats en jSON.

 Català