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:
| Method | Input | Output | Kasus Penggunaan |
|---|---|---|---|
Deserialize | Rujukan JSON | Dataset? | Kumpulan data tunggal daripada JSON |
DeserializeFile | Rujukan JSON | DicomFile? | Menyempurnakan fail DICOM dengan meta info |
DeserializeList | Rujukan JSON Array | Dataset[]? | 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.MedicalLangkah 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.