Bagaimana untuk deserialisasi DICOM JSON kembali ke Dataset atau DicomFile

Bagaimana untuk deserialisasi DICOM JSON kembali ke Dataset atau DicomFile

Tutorial ini menunjukkan bagaimana untuk deserialisasi DICOM JSON kembali ke Obyek Dataset atau DicomFile menggunakan C#. Kemampuan ini penting ketika Anda perlu untuk menyusun kembali data DIKOM dari jSON yang disimpan dalam database atau diterima dari web APIs.

Manfaat JSON Deserialisasi

  • • Rekonstruksi data :- Mengembalikan file DICOM dari JSON yang disimpan dalam database.

  • • Integrasi API:- Proses data DICOM yang diterima sebagai JSON dari layanan web.

  • *Proses Pemprosesan Ronde-Trip:- Serialisasi ke JSON, modifikasi, kemudian deserialisasi kembali ke DICOM.

Persyaratan: Persiapan Lingkungan

  • Menginstal Visual Studio atau IDE .NET yang kompatibel.
  • Mencipta aplikasi .NET 8 baru.
  • Instal Aspose.Medical dari NuGet Package Manager.

Memahami Opsi Deserialisasi

DicomJsonSerializer menyediakan berbagai metode deserialisasi:

MetodeInputoutputMenggunakan kasus
DeserializeKekuatan JSONDataset?Data dari JSON
DeserializeFileKekuatan JSONDicomFile?Mengisi file dengan meta info
DeserializeListJSON array stringDataset[]?Berbagai data dari JSON array

Panduan Langkah-Langkah untuk Deserialisasi DICOM JSON

Langkah 1: Instalasi Aspose.Medical

Tambahkan perpustakaan Aspose.Medical ke proyek Anda menggunakan NuGet.

Install-Package Aspose.Medical

Langkah 2: Menyertakan ruang nama yang diperlukan

Tambahkan referensi ke ruang nama yang diperlukan dalam kode Anda.

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

Langkah 3: Membaca konten JSON

Baca konten JSON dari file atau variabel.

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

Langkah 4: Deserialisasi ke Dataset

Penggunaan Deserialize untuk membangun kembali objek Dataset.

Dataset? dataset = DicomJsonSerializer.Deserialize(jsonText);

Langkah 5: Bekerja dengan Dataset

Mengakses dan memanipulasi set data yang direnovasi.

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

Langkah 6: Simpan kembali ke DICOM (optional)

Buat DicomFile baru dan simpan pada cakera.

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

Contoh kode lengkap: Deserialize Single Dataset

Berikut adalah contoh lengkap yang menunjukkan bagaimana untuk deserialisasi satu set data:

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

Penjelasan lengkap DicomFile

Ketika JSON Anda mencakup file meta informasi, gunakan 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");
}

Deserialisasi JSON Array ke Multi Dataset

Ketika bekerja dengan JSON array yang berisi beberapa set data:

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

Contoh Ronde-Trip: Serialize, Modify, Deserialize

Contoh penggunaan umum adalah mengubah data DICOM melalui 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");
}

Bekerja dengan penyimpanan database

Deserialize DICOM JSON diperoleh dari 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 Deserialisasi untuk Aplikasi Web

Untuk aplikasi ASP.NET Core, gunakan metode 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

Cara Mengatasi JSON yang Bermasalah

Selalu menggabungkan deserialisasi dalam blok tri-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}");
}

Cara Mengatasi JSON

Untuk file JSON yang besar, pastikan konten lengkap dibaca:

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

Versi Kompatibilitas

Pastikan JSON dihasilkan dengan versi serialiser yang kompatibel. versi yang salah dapat menyebabkan kegagalan deserialisasi.

Informasi Tambahan

  • Set data deserialisasi tidak mencakup data piksel kecuali tertanam dalam JSON asli.
  • Untuk penggunaan produksi, melaksanakan validasi input JSON yang tepat sebelum deserialisasi.
  • Pertimbangkan caching set data deserialisasi untuk data yang sering diakses.

Kesimpulan

Tutorial ini telah menunjukkan bagaimana untuk deserialisasi DICOM JSON kembali ke Dataset atau objek DicomFile dalam C# menggunakan Aspose.Medical.Kemampuan ini memungkinkan pemrosesan data DIKOM secara bulat dan integrasi tanpa wayar dengan sistem penyimpanan dan API berbasis jSON.

 Indonesia