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:
| Metodo | Input | uscita | Usare il caso |
|---|---|---|---|
Deserialize | Struttura JSON | Dataset? | Unità di dati da JSON |
DeserializeFile | Struttura JSON | DicomFile? | Completare il file DICOM con meta info |
DeserializeList | JSON array stringa | Dataset[]? | 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.MedicalPasso 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.