Làm thế nào để Deserialize DICOM JSON trở lại Dataset hoặc DicomFile
Hướng dẫn này cho thấy làm thế nào để deserialize DICOM JSON trở lại Dataset hoặc DicomFile đối tượng bằng cách sử dụng C#. Khả năng này là cần thiết khi bạn cần để xây dựng lại dữ liệu DIKOM từ J SON được lưu trữ trong cơ sở data hoặc nhận từ web APIs.
Lợi ích của JSON Deserialization
- Dữ liệu tái tạo *:- Khôi phục lại các tệp DICOM từ JSON được lưu trữ trong cơ sở dữ liệu.
- Phân tích API:- Xử lý DICOM dữ liệu nhận được như JSON từ các dịch vụ web.
- Phân phối vòng tròn *:- Serialize to JSON, modify, then deserialize back to DICOM.
Chủ đề: Chuẩn bị môi trường
- Cài đặt Visual Studio hoặc bất kỳ IDE .NET tương thích nào.
- Tạo một dự án ứng dụng .NET 8 mới.
- Cài đặt Aspose.Medical từ NuGet Package Manager.
Hiểu các tùy chọn Deserialization
DicomJsonSerializer cung cấp các phương pháp giải phóng khác nhau:
| Phương pháp | Input | Xuất | Sử dụng Case |
|---|---|---|---|
Deserialize | Đánh giá JSON string | Dataset? | Bộ dữ liệu đơn từ JSON |
DeserializeFile | Đánh giá JSON string | DicomFile? | Hoàn thành DICOM file với meta info |
DeserializeList | Đánh giá JSON Array String | Dataset[]? | Nhiều bộ dữ liệu từ JSON array |
Hướng dẫn từng bước để Deserialize DICOM JSON
Bước 1: Cài đặt Aspose.Medical
Thêm thư viện Aspose.Medical vào dự án của bạn bằng NuGet.
Install-Package Aspose.MedicalBước 2: Thêm các không gian tên cần thiết
Thêm tham chiếu đến các không gian tên cần thiết trong mã của bạn.
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;Bước 3: Đọc nội dung JSON
Đọc nội dung JSON từ một tệp hoặc biến thể.
string jsonText = File.ReadAllText("patient_scan.json");Bước 4: Deserialize to Dataset
Sử dụng Deserialize để xây dựng lại một đối tượng Dataset.
Dataset? dataset = DicomJsonSerializer.Deserialize(jsonText);Bước 5: Làm việc với Dataset
Truy cập và thao túng bộ dữ liệu được xây dựng lại.
if (dataset != null)
{
Console.WriteLine("Dataset successfully reconstructed from JSON.");
// Work with the dataset...
}Bước 6: Save Back to DICOM (tùy chọn)
Tạo một DicomFile mới và lưu vào đĩa.
if (dataset != null)
{
DicomFile newDcm = new DicomFile(dataset);
newDcm.Save("reconstructed.dcm");
}Mẫu mã đầy đủ: Deserialize Single Dataset
Dưới đây là một ví dụ đầy đủ cho thấy làm thế nào để deserialize một bộ dữ liệu duy nhất:
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.");
}Đánh giá về Complete DicomFile
Khi JSON của bạn bao gồm dữ liệu meta, sử dụng 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");
}Deserialize JSON Array đến nhiều tập tin dữ liệu
Khi làm việc với JSON rays chứa nhiều tập dữ liệu:
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!");
}Lời bài hát: Serialize, Modify, Deserialize
Một trường hợp sử dụng phổ biến là sửa đổi dữ liệu DICOM thông qua 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");
}Làm việc với Database Storage
Deserialize DICOM JSON thu được từ một cơ sở dữ liệu:
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 cho các ứng dụng web
Đối với các ứng dụng ASP.NET Core, sử dụng các phương pháp 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
Chế độ xử lý JSON
Luôn bao gồm sự biến mất trong các khối 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}");
}Hướng dẫn cài đặt Truncated JSON
Đối với các tệp JSON lớn, đảm bảo nội dung đầy đủ được đọc:
// 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.");
}Phiên bản tương thích
Hãy chắc chắn rằng JSON được tạo ra với một phiên bản tương thích của serializer. Phiên bản không phù hợp có thể gây ra thất bại deserialization.
Thông tin bổ sung
- Các tập tin dữ liệu trần gian không bao gồm các dữ kiện pixel trừ khi nó được tích hợp trong JSON ban đầu.
- Đối với việc sử dụng sản xuất, thực hiện xác thực thích hợp của input JSON trước khi deserialization.
- Hãy xem xét caching các tập tin dữ liệu trục trặc cho thông tin được truy cập thường xuyên.
Kết luận
Hướng dẫn này đã chứng minh làm thế nào để deserialize DICOM JSON trở lại Dataset hoặc DicomFile đối tượng trong C# bằng cách sử dụng Aspose.Medical. Khả năng này cho phép việc xử lý dữ liệu vòng tròn và tích hợp không dây với các hệ thống lưu trữ dựa trên json và API.