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 Dataset atau objek DicomFile menggunakan C#. Keupayaan ini adalah penting apabila anda perlu untuk membina semula data DIKOM daripada jSON disimpan dalam pangkalan data atau diterima daripada web APIs.

Tag: manfaat deserialisasi json

    • Pembinaan semula data * :- Memulihkan fail DICOM daripada JSON yang disimpan dalam pangkalan data.
  • *Perkh Integrasi :- Memproses data DICOM yang diterima sebagai JSON daripada perkhidmatan web.

  • *Penggunaan Ronde-Trip :- Serialisasi kepada JSON, mengubah suai, kemudian deserialisasi kembali kepada DICOM.

Tag: persiapan persekitaran

  • Menyediakan Visual Studio atau mana-mana .NET IDE yang kompatibel.
  • Mencipta projek aplikasi .NET 8 baru.
  • Instal Aspose.Medical daripada NuGet Package Manager.

Memahami pilihan deserialisasi

DicomJsonSerializer menyediakan pelbagai kaedah deserialisasi:

MethodInputOutputKasus Penggunaan
DeserializeRujukan JSONDataset?Kumpulan data tunggal daripada JSON
DeserializeFileRujukan JSONDicomFile?Menyempurnakan fail DICOM dengan meta info
DeserializeListRujukan JSON ArrayDataset[]?Berbilang set data daripada JSON array

Langkah-langkah panduan untuk deserialisasi DICOM JSON

Langkah 1: Instal Aspose.Medical

Tambah perpustakaan Aspose.Medical kepada projek anda menggunakan NuGet.

Install-Package Aspose.Medical

Langkah 2: Masukkan ruang nama yang diperlukan

Tambah rujukan kepada ruang nama yang diperlukan dalam kod anda.

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

Langkah 3: Membaca kandungan JSON

Baca kandungan JSON daripada fail atau variabel.

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

Langkah 4: Deserialisasi ke Dataset

Use Deserialize untuk membina semula objek Dataset.

Dataset? dataset = DicomJsonSerializer.Deserialize(jsonText);

Langkah 5: Bekerja dengan Dataset

Mengakses dan memanipulasi set data yang diubahsuai.

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

Langkah 6: Simpan kembali ke DICOM (pilihan)

Mencipta DicomFile baru dan simpan pada cakera.

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

Contoh Kod Lengkap: Deserialize Single Dataset

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

Perbincangan:Deserialize Complete DicomFile

Apabila JSON anda mengandungi meta maklumat fail, 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 kepada pelbagai set data

Apabila bekerja dengan JSON array yang mengandungi 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

Kes penggunaan yang biasa ialah 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");
}

Menyediakan penyimpanan pangkalan data

Deserialize DICOM JSON diperolehi daripada pangkalan data:

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 kaedah 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

Mengendalikan JSON yang rosak

Sentiasa membenamkan deserialisasi dalam blok percubaan:

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

Mengendalikan JSON yang terjejas

Untuk fail JSON yang besar, pastikan kandungan 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 Kompatibiliti

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

Maklumat tambahan

  • Set data deserialisasi tidak termasuk data piksel melainkan jika ia dimasukkan ke dalam JSON asal.
  • Untuk kegunaan pengeluaran, melaksanakan pengesahan input JSON yang betul sebelum deserialisasi.
  • Pertimbangkan caching set data deserialisasi untuk data yang sering diakses.

Conclusion

Tutorial ini telah membuktikan bagaimana untuk deserialisasi DICOM JSON kembali ke Dataset atau objek DicomFile dalam C# menggunakan Aspose.Medical. Keupayaan ini membolehkan pemprosesan data Ronde-trip dan integrasi tanpa wayar dengan sistem penyimpanan berasaskan jSON dan API.

 Melayu