Come Deserializzare DICOM JSON Torna a Dataset o DicomFile

Come Deserializzare DICOM JSON Torna a Dataset o DicomFile

Questo tutorial dimostra come deserializzare DICOM JSON indietro agli oggetti Dataset o DicomFile utilizzando C#. Questa capacità è essenziale quando è necessario ricostruire i dati DIKOM da J SON memorizzati in database o ricevuti da web APIs.

I vantaggi della deserializzazione JSON

    • Ristrutturazione dei dati *:- Ristrutturare i file DICOM da JSON memorizzati in database.
  • • Integrazione API:- Processare i dati DICOM ricevuti come JSON dai servizi web.

    • Progettazione di round-trip:- Serializzare a JSON, modificare, poi deserializzarlo indietro a DICOM.

Prerequisiti: preparare l’ambiente

  • Inserisci Visual Studio o qualsiasi compatibile .NET IDE.
  • Creare un nuovo progetto di applicazione .NET 8 console.
  • Installare Aspose.Medical dal NuGet Package Manager.

Le opzioni di deserializzazione

Il DicomJsonSerializer fornisce diversi metodi di deseralizzazione:

MetodoInputuscitaUsare il caso
DeserializeStruttura JSONDataset?Unità di dati da JSON
DeserializeFileStruttura JSONDicomFile?Completare il file DICOM con meta info
DeserializeListJSON array stringaDataset[]?Molti set di dati da JSON array

Guida passo dopo passo per deserializzare DICOM JSON

Passo 1: Installare Aspose.Medical

Aggiungi la biblioteca medica Aspose al tuo progetto utilizzando NuGet.

Install-Package Aspose.Medical

Passo 2: Includere gli spazi di nome necessari

Aggiungi riferimenti agli spazi di nome richiesti nel tuo codice.

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

Passo 3: Leggi il contenuto JSON

Leggi il contenuto JSON da un file o variabile.

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

Passo 4: Deserializzare a Dataset

Utilizzo Deserialize Ristrutturare un oggetto Dataset.

Dataset? dataset = DicomJsonSerializer.Deserialize(jsonText);

Passo 5: Lavorare con il Dataset

Accedere e manipolare il database ricostruito.

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

Passo 6: Salva di nuovo a DICOM (opzionale)

Creare un nuovo DicomFile e salvare sul disco.

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

Esempio di codice completo: Deserializzare un singolo database

Ecco un esempio completo che dimostra come deserializzare un singolo set di dati:

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

Deserializzare Complete DicomFile

Quando il tuo JSON include i metadati di file, utilizzare 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");
}

Deserializzare JSON Array per molti set di dati

Quando si lavora con JSON radiazioni che contengono più set di dati:

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

Esempio di round-trip: serializzare, modificare, deserializzarsi

Un caso comune di utilizzo è la modifica dei dati DICOM tramite 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");
}

Lavorare con il database storage

Deserializzare DICOM JSON ottenuto da un database:

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 Deserializzazione per le applicazioni Web

Per le applicazioni ASP.NET Core, utilizzare i metodi 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

Trattamento malformato JSON

Inserisci sempre la deserializzazione nei blocchi di tentativo:

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

Gestione di Truncated JSON

Per i file JSON di grandi dimensioni, assicurarsi che il contenuto completo sia letto:

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

Versione di compatibilità

Assicurarsi che il JSON sia stato generato con una versione compatibile del serializzatore. versioni sbagliate possono causare fallimenti di deserializzazione.

Informazioni aggiuntive

  • I dati deserializzati non includono dati pixel a meno che non siano stati incorporati nel JSON originale.
  • Per l’uso di produzione, applicare la corretta validazione dell’ingresso JSON prima della deserializzazione.
  • Considerare il caching dei set di dati deserializzati per i dati frequentemente accessibili.

conclusione

Questo tutorial ha dimostrato come deserializzare DICOM JSON indietro agli oggetti Dataset o DicomFile in C# utilizzando Aspose.Medical.Questa capacità consente il trattamento di dati di round-trip e l’integrazione senza sguardo con i sistemi di archiviazione e API basati su jSON.

 Italiano