如何自定义DICOM JSON输出与DicomJsonSerializerOptions

如何自定义DICOM JSON输出与DicomJsonSerializerOptions

此教程展示了如何使用 DicomJsonSerializerOptions在 C# 定制 DICOM JSON 序列化输出。

为什么要定制 JSON 输出?

不同系统可能需要不同的 JSON 格式。

  • 使用人可读的关键字而不是标签数字
  • 包含标签名称文档
  • 检查数字值如何呈现
  • 满足第三方系统的具体要求

原标题:准备环境

  • 设置 Visual Studio 或任何兼容的 .NET IDE.
  • 创建一个新的 .NET 8 控制台应用程序项目。
  • 在 NuGet Package Manager 中安装 Aspose.Medical。

可用的序列化选项

选项描述Impact
UseKeywordsAsJsonKeys使用 DICOM 关键字而不是标签数字作为 JSON 密钥"PatientName" vs "00100010"
WriteKeyword包含每个标签对象中的关键字字Adds "keyword": "PatientName"
WriteName包含每个标签对象中的名称字段Adds "name": "Patient's Name"
NumberHandling控制数值代表性作为行或实际 JSON 数字的数字

步骤指南 定制 JSON 输出

步骤1:安装 Aspose.Medical

使用 NuGet 将 Aspose.Medical 图书馆添加到您的项目中。

Install-Package Aspose.Medical

步骤2:包含必要的名称空间

在您的代码中添加所需的名称空间的参考.

using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
using System.Text.Json.Serialization;

步骤3:创建选项实例

创建 A DicomJsonSerializerOptions 例如设置设置。

DicomJsonSerializerOptions options = new DicomJsonSerializerOptions();

步骤4:设置选项

为您的 JSON 输出设置所需选项。

options.UseKeywordsAsJsonKeys = true;
options.WriteKeyword = true;
options.WriteName = true;
options.NumberHandling = JsonNumberHandling.WriteAsString;

步骤5:通过选项进行序列化

将选项转移到 Serialize 方法。

DicomFile dcm = DicomFile.Open("patient_scan.dcm");
string json = DicomJsonSerializer.Serialize(dcm, options, writeIndented: true);

步骤6:保存自定义输出

保存或使用自定义 JSON。

File.WriteAllText("customized_output.json", json);
Console.WriteLine("Customized JSON output saved!");

完整的代码示例与所有选项

下面是一个完整的例子,显示了所有定制选项:

using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
using System.Text.Json.Serialization;

// Load DICOM file
DicomFile dcm = DicomFile.Open("patient_scan.dcm");

// Configure serialization options
DicomJsonSerializerOptions options = new DicomJsonSerializerOptions
{
    UseKeywordsAsJsonKeys = true,
    WriteKeyword = true,
    WriteName = true,
    NumberHandling = JsonNumberHandling.WriteAsString
};

// Serialize with custom options
string json = DicomJsonSerializer.Serialize(dcm, options, writeIndented: true);

// Save output
File.WriteAllText("fully_customized.json", json);

Console.WriteLine("DICOM serialized with all custom options!");
Console.WriteLine(json);

比较输出格式

默认输出(标准PS3.18格式)

{
  "00100010": {
    "vr": "PN",
    "Value": [{ "Alphabetic": "DOE^JOHN" }]
  },
  "00100020": {
    "vr": "LO",
    "Value": ["12345"]
  }
}

使用KeywordsAsJsonKeys = 真实

{
  "PatientName": {
    "vr": "PN",
    "Value": [{ "Alphabetic": "DOE^JOHN" }]
  },
  "PatientID": {
    "vr": "LO",
    "Value": ["12345"]
  }
}

与 WriteKeyword 和 WriteName = 真实

{
  "00100010": {
    "vr": "PN",
    "keyword": "PatientName",
    "name": "Patient's Name",
    "Value": [{ "Alphabetic": "DOE^JOHN" }]
  }
}

与编号操作 = WriteAsString

{
  "00280010": {
    "vr": "US",
    "Value": ["512"]
  }
}

与 编号 处理 = 允许 阅读 由 String 和 WriteAsNumber

{
  "00280010": {
    "vr": "US",
    "Value": [512]
  }
}

使用案例示例

人文可读的文档

DicomJsonSerializerOptions docOptions = new DicomJsonSerializerOptions
{
    UseKeywordsAsJsonKeys = true,
    WriteKeyword = true,
    WriteName = true
};

string documentationJson = DicomJsonSerializer.Serialize(dcm, docOptions, writeIndented: true);

PS3.18 兼容的 Web 服务

// Use default options for DICOM PS3.18 compliance
DicomJsonSerializerOptions webOptions = new DicomJsonSerializerOptions
{
    UseKeywordsAsJsonKeys = false,  // Use tag numbers
    WriteKeyword = false,
    WriteName = false,
    NumberHandling = JsonNumberHandling.WriteAsString
};

string ps318Json = DicomJsonSerializer.Serialize(dcm, webOptions);

JavaScript Frontend 集成

DicomJsonSerializerOptions jsOptions = new DicomJsonSerializerOptions
{
    UseKeywordsAsJsonKeys = true,  // Easier to work with in JS
    NumberHandling = JsonNumberHandling.AllowReadingFromString  // Native numbers
};

string jsCompatibleJson = DicomJsonSerializer.Serialize(dcm, jsOptions);

数据库存储

DicomJsonSerializerOptions dbOptions = new DicomJsonSerializerOptions
{
    UseKeywordsAsJsonKeys = true,  // Better for querying
    WriteKeyword = false,          // Reduce storage size
    WriteName = false
};

string compactJson = DicomJsonSerializer.Serialize(dcm, dbOptions);

重要考虑

互动性警告

非标准选项可能会破坏与某些 DICOM 插件的兼容性:

// WARNING: This format may not be compatible with all DICOM JSON parsers
DicomJsonSerializerOptions nonStandardOptions = new DicomJsonSerializerOptions
{
    UseKeywordsAsJsonKeys = true  // Not PS3.18 compliant
};

// For maximum compatibility, use defaults:
DicomJsonSerializerOptions standardOptions = new DicomJsonSerializerOptions();

遵守的建议

当 DICOM PS3.18 符合要求时,请使用默认设置:

// PS3.18 compliant serialization
string compliantJson = DicomJsonSerializer.Serialize(dcm);  // No custom options

基于流的序列化与选项

对于大文件,使用基于流的序列化:

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

DicomFile dcm = DicomFile.Open("large_scan.dcm");

DicomJsonSerializerOptions options = new DicomJsonSerializerOptions
{
    UseKeywordsAsJsonKeys = true,
    WriteKeyword = true
};

using (FileStream fs = File.Create("large_customized.json"))
{
    DicomJsonSerializer.Serialize(fs, dcm.Dataset, options, writeIndented: true);
}

更多信息

  • 个性化选项影响 serialization 和 deserialisation - 确保一致的选择,当旋转数据。
  • 是的 WriteName 选项添加人可阅读的 DICOM 标签名称,这增加了 JSON 尺寸,但提高了可读性。
  • 某些第三方系统可能需要具体的 JSON 格式 - 在选择选项之前查看他们的文档。

结论

通过配置 DicomJsonSerializerOptions,您可以调整 JSON 格式,以满足具体的集成要求,同时平衡可读性、尺寸和互动性需求。

 中文