Jak dezerializować DICOM JSON z powrotem do Dataset lub DicomFile

Jak dezerializować DICOM JSON z powrotem do Dataset lub DicomFile

Ten tutorial pokazuje, jak deserializować DICOM JSON z powrotem do obiektów Dataset lub DicomFile za pomocą C#. Ta zdolność jest niezbędna, gdy musisz odtworzyć dane DIKOM z JSon przechowywane w bazach danych lub otrzymane z sieci APIs.

Korzyści z deserializacji JSON

  • • Rekonstrukcja danych:- Odzyskiwanie plików DICOM z JSON przechowywanych w bazach danych.

  • • Integracja API:- Przetwarzanie DICOM danych otrzymanych jako JSON z usług internetowych.

    • Przetwarzanie okrągłego przepływu *:- Seriować do JSON, modyfikować, a następnie deserializować z powrotem do DICOM.

Wymagania: przygotowanie środowiska

  • Zainstaluj program Visual Studio lub dowolny kompatybilny .NET IDE.
  • Stwórz nowy projekt aplikacji konsoli .NET 8.
  • Instaluj Aspose.Medical z programu NuGet Package Manager.

Zrozumienie opcji deseralizacji

DicomJsonSerializer oferuje różne metody deserializacji:

MetodaInputWyjścieUżyj przypadków
DeserializeJSON strumieńDataset?Jednolity zestaw danych od JSON
DeserializeFileJSON strumieńDicomFile?Wypełnij plik DICOM z meta info
DeserializeListJSON array strumieńDataset[]?Wiele zestawów danych z JSON array

Przewodnik krok po kroku do deserializacji DICOM JSON

Krok 1: Instalacja Aspose.Medical

Dodaj do projektu bibliotekę Aspose.Medical za pomocą NuGet.

Install-Package Aspose.Medical

Krok 2: Włącz niezbędne przestrzenie nazwowe

Dodaj odniesienia do wymaganych przestrzeni nazwowych w kodzie.

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

Krok 3: Przeczytaj treść JSON

Przeczytaj treść JSON z pliku lub zmiennej.

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

Krok 4: Deserializuj się do zestawu danych

Używanie Deserialize Aby odtworzyć obiekt Dataset.

Dataset? dataset = DicomJsonSerializer.Deserialize(jsonText);

Krok 5: Praca z datasetem

Dostęp i manipulacja z odbudowanym zestawem danych.

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

Krok 6: Zapisz z powrotem do DICOM (opcjonalnie)

Stwórz nowy DicomFile i przechowuj na dysku.

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

Pełny przykład kodu: Deserialize Single Dataset

Oto kompletny przykład, który pokazuje, jak dezerializować pojedynczy zestaw danych:

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

Odkryj kompletny DicomFile

Jeśli JSON zawiera informacje o metach pliku, użyj 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");
}

Deserializuj JSON Array do wielu zestawów danych

Podczas pracy z JSON wyświetlacze zawierające kilka zestawów danych:

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

Przykłady okrągłego podróży: Serializ, Modify, Deserialize

Jednym z najczęściej używanych przypadków jest modyfikacja danych DICOM za pośrednictwem 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");
}

Praca z przechowywaniem baz danych

Deserialize DICOM JSON uzyskane z bazy danych:

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 Deserialization dla aplikacji internetowych

W przypadku aplikacji ASP.NET Core użyj metod 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

Zwalczanie złośliwego JSON

Zawsze wklej deserializację w blokach try-catch:

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

Rozwiązywanie truncated jSON

W przypadku dużych plików JSON upewnij się, że pełna zawartość jest odczytana:

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

Kompatybilność wersji

Upewnij się, że JSON został stworzony z kompatybilną wersją serializatora. nieprawidłowe wersje mogą powodować błędy w deserializacji.

Dodatkowe informacje

  • Deserializowane zestawy danych nie zawierają danych pikseli, chyba że zostały wbudowane w oryginalny JSON.
  • Do użytku produkcyjnego należy wdrożyć odpowiednią weryfikację wejścia JSON przed deserializacją.
  • Uważaj na caching deserializowanych zestawów danych dla często dostępnych danych.

konkluzja

Ten tutorial wykazał, jak dezerializować DICOM JSON z powrotem do obiektów Dataset lub DicomFile w C# za pomocą Aspose.Medical. Ta zdolność umożliwia okrągłe przetwarzanie danych DIKOM i bezprzewodową integrację z systemami magazynowania i API opartymi na jSON.

 Polski