如何将 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出口使用案例
DeserializeJSON 序列Dataset?单一数据集 JSON
DeserializeFileJSON 序列DicomFile?完整 DICOM 文件与 meta info
DeserializeListJSON 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 系统。

 中文