Hvordan å deserialisere DICOM JSON tilbake til Dataset eller DicomFile

Hvordan å deserialisere DICOM JSON tilbake til Dataset eller DicomFile

Denne veiledningen viser hvordan du deserialiserer DICOM JSON tilbake til Dataset eller DicomFile gjenstander ved hjelp av C#. Denne evnen er viktig når du trenger å rekonstruere DIKOM data fra jSON lagret i databaser eller mottatt fra web APIs.

Fordelene med JSON Deserialisering

  • Data gjenoppbygging:- Gjenopprette DICOM-filer fra JSON lagret i databaser.

  • • API integrasjon:- Prosess DICOM data mottatt som JSON fra webtjenester.

  • **Rund-Trip prosessering av *:- Serialiser til JSON, modifiser, deretter deserialiserer tilbake til DICOM.

Forutsetninger: Å forberede miljøet

  • Installer Visual Studio eller noe kompatibelt .NET IDE.
  • Skap et nytt .NET 8 konsolapplikasjon prosjekt.
  • Installere Aspose.Medical fra NuGet Package Manager.

Forstå deserialiseringsalternativer

DicomJsonSerializer gir ulike deserialiseringsmetoder:

MethodInputOutputBruker tilfelle
DeserializeJSON StringDataset?Enkel datasett fra JSON
DeserializeFileJSON StringDicomFile?Komplett DICOM fil med meta info
DeserializeListJSON array strengerDataset[]?Flere datasett fra JSON array

Step-by-step guide for å deserialisere DICOM JSON

Steg 1: Installere Aspose.Medical

Legg til Aspose.Medical Library til prosjektet ditt ved hjelp av NuGet.

Install-Package Aspose.Medical

Steg 2: Inkludere nødvendige navnområder

Legg til referanser til de nødvendige navnene i koden din.

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

Trinn 3: Les JSON innhold

Les JSON-innholdet fra en fil eller variabel.

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

Steg 4: Deserialisere til Dataset

Use Deserialize Å gjenopprette et datasettobjekt.

Dataset? dataset = DicomJsonSerializer.Deserialize(jsonText);

Steg 5: Arbeid med datasettet

Få tilgang til og manipulere den rekonstruerte datasettet.

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

Steg 6: Spar tilbake til DICOM (alternativt)

Skap en ny DicomFile og lagre til disken.

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

Komplett kode Eksempel: Deserialize Single Dataset

Her er et komplett eksempel som viser hvordan å deserialisere en enkelt datasett:

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

Deserialisere Complete DicomFile

Når JSON-filen inneholder metainformasjon, bruk 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");
}

Deserialisere JSON Array til flere datasett

Når du jobber med JSON, er det arrayer som inneholder flere datasett:

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 Eksempel: Serialize, Modify, Deserialize

En vanlig brukssituasjon er å endre DICOM-data gjennom 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");
}

Arbeid med databaseslagring

Deserialize DICOM JSON hentet fra en 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 Deserialisering for webapplikasjoner

For ASP.NET Core applikasjoner, bruk async metoder:

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

Behandling av forstyrret JSON

Alltid vekk deserialisering i try-catch blokker:

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

Håndtering av Truncated JSON

For store JSON-filer, sørg for at fullstendig innhold blir lest:

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

Versjonskompatibilitet

Sørg for at JSON ble generert med en kompatibel versjon av serialiseren. feilaktige versjoner kan forårsake deserialiseringsfeil.

Ytterligere informasjon

  • Deserialiserte datasett inneholder ikke pixeldata med mindre det er innebygd i den opprinnelige JSON.
  • For produksjonsbruk, implementere riktig validering av JSON input før deserialisering.
  • Tenk på caching deserialiserte datasett for hyppig tilgjengelige data.

Conclusion

Denne veiledningen har vist hvordan å deserialisere DICOM JSON tilbake til Dataset eller DicomFile gjenstander i C# ved hjelp av Aspose.Medical. Denne evnen gjør det mulig å bearbeide dicom data på runde veier og seamless integrasjon med jSON-baserte lagring og API-systemer.

 Norsk