Ako dezerializovať DICOM JSON späť na Dataset alebo DicomFile

Ako dezerializovať DICOM JSON späť na Dataset alebo DicomFile

Tento tutoriál ukazuje, ako dezerializovať DICOM JSON späť na Dataset alebo DicomFile objekty pomocou C#. Táto schopnosť je nevyhnutná, keď potrebujete rekonštruovať dáta DicOM z JSon uložené v databázach alebo prijaté z web APIs.

Výhody JSON deserializácie

    • Rekonštrukcia údajov *:- Obnovte súbory DICOM z JSON uložené v databázach.
  • • Integrovanie API:- DICOM údaje získané ako JSON z webových služieb.

  • ** Round-Trip spracovanie**:- Serializovať na JSON, modifikovať, a potom deserialize späť na DICOM.

Predpoklady: Príprava životného prostredia

  • Nastaviť Visual Studio alebo akýkoľvek kompatibilný .NET IDE.
  • Vytvorte nový projekt aplikácie .NET 8 konzoly.
  • Inštalovať Aspose.Medical z NuGet Package Manager.

Zoznámenie s možnosťami deserializácie

DicomJsonSerializer poskytuje rôzne metódy deseralizácie:

MethodInputVýstupPoužitie prípadu
DeserializeJSON štruktúraDataset?Jednotlivé databázy od JSON
DeserializeFileJSON štruktúraDicomFile?Kompletné DICOM súbor s meta info
DeserializeListJSON array prúžokDataset[]?Multiple datasets od JSON array

Krok za krokom návod na deserializáciu DICOM JSON

Krok 1: Inštalácia Aspose.Medical

Pridajte do projektu Aspose.Medicínska knižnica pomocou NuGet.

Install-Package Aspose.Medical

Krok 2: Vložte potrebné názvové priestory

Pridajte odkazy na požadované názvové priestory vo vašom kóde.

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

Krok 3: Prečítajte si JSON obsah

Prečítajte si obsah JSON z súboru alebo variable.

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

Krok 4: Deserializovať na Dataset

Použitie Deserialize na rekonštrukciu objektu Dataset.

Dataset? dataset = DicomJsonSerializer.Deserialize(jsonText);

Krok 5: Práca s datasetom

Prístup a manipulácia s rekonštruovanou databázou.

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

Krok 6: Uložiť späť na DICOM (voliteľné)

Vytvorte nový DicomFile a uložte ho na disk.

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

Kompletný príklad kódu: Deserialize Single Dataset

Tu je úplný príklad, ktorý ukazuje, ako dezerializovať jeden súbor údajov:

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

Deserializovať kompletné DicomFile

Keď vaše JSON obsahuje meta informácie súboru, používať 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");
}

Deserializovať JSON Array na viaceré dátové súbory

Pri práci s JSON radia obsahujúce viaceré databázy:

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 Príklad: Serializovať, zmeniť, deserialize

Jedným z najčastejších prípadov používania je úprava údajov DICOM prostredníctvom 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");
}

Práca s databázovým úložiskom

Deserialize DICOM JSON získané z databázy:

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 Deserializácia pre webové aplikácie

Pre aplikácie ASP.NET Core použite metódy 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

Vykonávanie malformovaného JSON

Vždy vložte deserializáciu do try-catch blokov:

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

Spracovanie Truncated JSON

Pre veľké súbory JSON, uistite sa, že kompletný obsah je čítaný:

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

verzia kompatibilita

Uistite sa, že JSON bol generovaný s kompatibilnou verziou serializátora. nesúladné verzie môžu spôsobiť zlyhanie deserializácie.

Dodatočné informácie

  • Deserializované datasety nezahŕňajú pixelové údaje, pokiaľ neboli vložené do pôvodného JSON.
  • Pre výrobné použitie, vykonajte správnu validáciu JSON vstupu pred deserializáciou.
  • Vezmite do úvahy caching deserializovaných databáz pre často prístupné údaje.

Záver

Tento tutoriál ukázal, ako dezerializovať DICOM JSON späť na Dataset alebo DicomFile objekty v C# pomocou Aspose.Medical. Táto schopnosť umožňuje obdĺžnikové spracovanie údajov a bezdrôtovú integráciu so systémami ukladania a API založenými na jSON.

 Slovenčina