Hvordan man deserialiserer DICOM JSON tilbage til Dataset eller DicomFile

Hvordan man deserialiserer DICOM JSON tilbage til Dataset eller DicomFile

Denne tutorial viser, hvordan du deserialiserer DICOM JSON tilbage til Dataset eller DicomFile objekter ved hjælp af C#. Denne kapacitet er afgørende, når du har brug for at rekonstruere DIKOM-data fra jSON gemt i databaser eller modtaget fra web APIs.

Fordele ved JSON Deserialization

    • Rekonstruktion af data *:- Gendannelse af DICOM-filer fra JSON gemt i databaser.
    • Integration af API’er:- Process DICOM data modtaget som JSON fra webtjenester.
  • Rund-Trip forarbejdning:- Serialiser til JSON, ændrer og deserialiserer derefter tilbage til DICOM.

Forside: Forberedelse af miljøet

  • Indstill Visual Studio eller ethvert kompatibelt .NET IDE.
  • Skab et nyt .NET 8 applikationsprojekt.
  • Installere Aspose.Medical fra NuGet Package Manager.

Forstå deserialiseringsmuligheder

DicomJsonSerializer giver forskellige deserialiseringsmetoder:

MethodInputUdgangBrug af tilfælde
DeserializeJSON StringDataset?Datasæt fra JSON
DeserializeFileJSON StringDicomFile?Komplet DICOM fil med meta info
DeserializeListJSON array strækningDataset[]?Flere datasæt fra JSON array

Step-by-step guide til deserialisering af DICOM JSON

Trin 1: Installation af Aspose.Medical

Tilføj Aspose.Medicinsk bibliotek til dit projekt ved hjælp af NuGet.

Install-Package Aspose.Medical

Trin 2: Indtast de nødvendige navneområder

Tilføj henvisninger til de krævede navneområder i din kode.

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

Trin 3: Læs JSON-indhold

Læs JSON-indholdet fra en fil eller variabel.

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

Trin 4: Deserialiser til Dataset

Brug af Deserialize For at genopbygge et datasetobjekt.

Dataset? dataset = DicomJsonSerializer.Deserialize(jsonText);

Trin 5: Arbejd med dataset

Få adgang til og manipulere den rekonstruerede datasæt.

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

Trin 6: Save Back to DICOM (Optionelt)

Skab en ny DicomFile og gem til disk.

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

Komplet kode Eksempel: Deserialize Single Dataset

Her er et komplet eksempel på, hvordan man deserialiserer et enkelt datasæt:

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

Deserialiser fuldstændig DicomFile

Når din JSON indeholder meta-oplysninger, skal du bruge 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");
}

Deserialize JSON Array til flere datasæt

Når du arbejder med JSON aræer, der indeholder flere datasæt:

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 almindelig brug er at ændre DICOM-data via 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");
}

Arbejde 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 til webapplikationer

For ASP.NET Core-applikationer bruger du 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 af malformede JSON

Altid blande deserialisering i try-catch blokke:

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 af Truncated JSON

For store JSON-filer skal du sørge for, at det komplette indhold læses:

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

Kompatibilitet version

Sørg for, at JSON er genereret med en kompatibel version af serialiseren. Mismatched versioner kan forårsage deserialiseringsfejl.

Yderligere information

  • Deserialiserede datasæt indeholder ikke pixeldata, medmindre det er indlejret i den oprindelige JSON.
  • For produktionsanvendelse, gennemføre korrekt validering af JSON indtægter før deserialisering.
  • Overvej caching deserialiserede datasæt for hyppigt tilgængelige data.

Konklusion

Denne tutorial har vist, hvordan man deserialiserer DICOM JSON tilbage til Dataset eller DicomFile objekter i C# ved hjælp af Aspose.Medical. Denne kapacitet muliggør runde-trip DIKOM data bearbejdning og seamless integration med jSON-baserede lagring og API-systemer.

 Dansk