如何将 DICOM JSON 返回 Dataset 或 DicomFile
如何将 DICOM JSON 返回 Dataset 或 DicomFile
此教程展示了如何将 DICOM JSON 恢复到 Dataset 或 DicomFile 对象,使用 C#. 这种能力是必不可少的,当您需要重建从存储在数据库或从 Web APIs 中获取的 DIKOM 数据时。
JSON Deserialization 的好处
数据重建:- 恢复从 JSON 存储在数据库中的 DICOM 文件。
- API 集成*:- 将 DICOM 数据从 Web 服务中作为 JSON 获取。
** 路径处理**:- 将序列转换为 JSON,修改,然后返回 DICOM。
原标题:准备环境
- 设置 Visual Studio 或任何兼容的 .NET IDE.
- 创建一个新的 .NET 8 控制台应用程序项目。
- 在 NuGet Package Manager 中安装 Aspose.Medical。
了解消化选项
DicomJsonSerializer提供不同的消化方法:
| 方法 | Input | 出口 | 使用案例 |
|---|---|---|---|
Deserialize | JSON 序列 | Dataset? | 单一数据集 JSON |
DeserializeFile | JSON 序列 | DicomFile? | 完整 DICOM 文件与 meta info |
DeserializeList | JSON Array 序列 | Dataset[]? | 来自JSON Array的多元数据集 |
步骤指南,以消化DICOM JSON
步骤1:安装 Aspose.Medical
使用 NuGet 将 Aspose.Medical 图书馆添加到您的项目中。
Install-Package Aspose.Medical步骤2:包含必要的名称空间
在您的代码中添加所需的名称空间的参考.
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;步骤3:阅读 JSON 内容
从文件或变量中阅读 JSON 内容。
string jsonText = File.ReadAllText("patient_scan.json");步骤4:转移到数据集
使用 Deserialize 重建一个数据集对象。
Dataset? dataset = DicomJsonSerializer.Deserialize(jsonText);步骤5:与数据集合作
访问和操纵重建的数据集。
if (dataset != null)
{
Console.WriteLine("Dataset successfully reconstructed from JSON.");
// Work with the dataset...
}步骤6:保存回到DICOM(可选)
创建一个新的DicomFile,并将其存储到磁盘上。
if (dataset != null)
{
DicomFile newDcm = new DicomFile(dataset);
newDcm.Save("reconstructed.dcm");
}完整代码示例:单个数据集的消化
下面是一個完整的例子,表明如何解析一個單一的資料集:
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.");
}完美的DicomFile
当您的 JSON 包含文件 meta 信息时,使用 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");
}将 JSON Array 转移到多个数据集
在使用 JSON 时,包含多个数据集的序列:
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!");
}路径示例: Serialize, Modify, Deserialize
一个常见的使用案例是通过 JSON 修改 DICOM 数据:
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");
}与数据库存储工作
Deserialize DICOM JSON 从数据库中获取:
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
对于 ASP.NET 核心应用程序,使用 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
处理错误的JSON
总是在 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}");
}打破JSON
对于大型 JSON 文件,确保完整的内容被阅读:
// 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.");
}版本兼容性
确保 JSON 与序列化器的兼容版本相结合,错误的版本可能会导致无序化故障。
更多信息
- 虚拟化数据集不包含像素数据,除非它被嵌入到原始 JSON。
- 用于生产使用,在消化之前执行 JSON 输入的适当验证。
- 考虑在频繁访问的数据中进行虚拟化数据集。
结论
此教程已经展示了如何将 DICOM JSON 返回 Dataset 或 DicomFile 对象在 C# 使用 Aspose.Medical. 这种能力允许循环 DIKOM 数据处理和无缝集成与基于 jSON 的存储和 API 系统。