Hur man deserialiserar DICOM JSON tillbaka till Dataset eller DicomFile

Hur man deserialiserar DICOM JSON tillbaka till Dataset eller DicomFile

Denna tutorial visar hur man deserialiserar DICOM JSON tillbaka till Dataset eller DicomFile objekt med hjälp av C#. Denna kapacitet är nödvändig när du behöver för att rekonstruera DIKOM-data från jSON som lagras i databaser eller mottagits från web APIs.

Fördelar med JSON Deserialization

    • Dataåteruppbyggnad *- Återställa DICOM-filer från JSON som lagras i databaser.
  • • API Integration *:- Processera DICOM-data som mottagits som JSON från webbtjänster.

  • **Rund-Trip bearbetning *- Serialisera till JSON, modifiera och sedan deserializera tillbaka till DICOM.

Förutsättningar: Förbereda miljön

  • Installera Visual Studio eller någon kompatibel .NET IDE.
  • Skapa ett nytt .NET 8 konsolprogram.
  • Installera Aspose.Medical från NuGet Package Manager.

Förstå deserialiseringsalternativ

DicomJsonSerializer ger olika deserialiseringsmetoder:

MetodInputUtgångAnvända fall
DeserializeJSON strängDataset?Enstaka dataset från JSON
DeserializeFileJSON strängDicomFile?Komplett DICOM-fil med meta info
DeserializeListJSON array strängDataset[]?Multiple datasets från JSON array

Steg-för-steg guide för att deserialisera DICOM JSON

Steg 1: Installera Aspose.Medical

Lägg till Aspose.Medicinska biblioteket till ditt projekt med NuGet.

Install-Package Aspose.Medical

Steg 2: Inkludera nödvändiga namnutrymmen

Lägg till hänvisningar till de nödvändiga namnutrymmenna i koden.

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

Steg 3: Läs JSON innehåll

Läs JSON-innehållet från en fil eller variabel.

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

Steg 4: Deserialisera till Dataset

Användning Deserialize att återställa ett Dataset-objekt.

Dataset? dataset = DicomJsonSerializer.Deserialize(jsonText);

Steg 5: Arbeta med dataset

Tillgång och manipulering av den ombyggda dataset.

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

Steg 6: Spara tillbaka till DICOM (alternativ)

Skapa en ny DicomFile och spara på disken.

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

Komplett kod Exempel: Deserialize Single Dataset

Här är ett komplett exempel som visar hur man deserialiserar en enda dataset:

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

Deserialisera Complete DicomFile

När din JSON innehåller meta-information i filen, använd 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");
}

Deserialisera JSON Array till flera datasets

När du arbetar med JSON rader som innehåller flera dataset:

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

Ett vanligt användningsfall är att ändra 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");
}

Arbeta med databaslagring

Deserialize DICOM JSON hämtat från en databas:

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 för webbapplikationer

För ASP.NET Core-applikationer, använd 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 skadad JSON

Alltid inkräkt deserialisering i try-catch block:

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

Handling Truncated JSON

För stora JSON-filer, se till att komplett innehåll läsas:

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

Version kompatibilitet

Se till att JSON genereras med en kompatibel version av serialisatorn. Felversioner kan orsaka deserialiseringsfel.

Ytterligare information

  • Deserialiserade dataset innehåller inte pixeldata om det inte är inbäddat i den ursprungliga JSON.
  • För produktionsanvändning, genomföra korrekt validering av JSON input före deserialisering.
  • Tänk på att caching deserialiserade dataset för ofta åtkomna data.

slutsatser

Denna handledning har visat hur man deserialiserar DICOM JSON tillbaka till Dataset eller DicomFile objekt i C# med hjälp av Aspose.Medical. Denna kapacitet möjliggör rundvägs databehandling och trådlös integration med JSon-baserade lagring och API-system.

 Svenska