Aspose.Medical DICOM 为 .NET 文本转换器
Aspose.Medical DICOM to Text Converter for .NET 是一个强大的 API 专注于 转换 DICOME 数据到人可阅读和机器可破坏的格式. 它将 DIKOME 的数据集序列化为 JSON 和 XML 形式,允许与 Web 服务、 REST APIs 以及现代医疗保健系统进行整合。
安装和设置
支持的平台
- 操作系统:Windows、Linux、MacOS
- ** 框架:** .NET 8.0+
- ** 架构:** x64, ARM64 (macOS)
快速启动
(一)向JSON说话
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
DicomFile dcm = DicomFile.Open("patient_scan.dcm");
string json = DicomJsonSerializer.Serialize(dcm);2) DICOM 到 JSON 与 Pretty Print
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
DicomFile dcm = DicomFile.Open("patient_scan.dcm");
string formattedJson = DicomJsonSerializer.Serialize(dcm, writeIndented: true);
Console.WriteLine(formattedJson);3) DICOM Dataset 到 JSON
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
DicomFile dcm = DicomFile.Open("patient_scan.dcm");
Dataset dataset = dcm.Dataset;
string json = DicomJsonSerializer.Serialize(dataset, writeIndented: true);4)多 DICOM 文件到 JSON Array
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
DicomFile dcm1 = DicomFile.Open("scan1.dcm");
DicomFile dcm2 = DicomFile.Open("scan2.dcm");
Dataset[] datasets = [dcm1.Dataset, dcm2.Dataset];
string json = DicomJsonSerializer.Serialize(datasets, writeIndented: true);5) Serialize to Stream(记忆效益)
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
DicomFile dcm = DicomFile.Open("patient_scan.dcm");
using MemoryStream stream = new();
DicomJsonSerializer.Serialize(stream, dcm.Dataset);6) 保存为 JSON 文件
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
DicomFile dcm = DicomFile.Open("patient_scan.dcm");
using FileStream output = File.Create("output.json");
DicomJsonSerializer.Serialize(output, dcm.Dataset, writeIndented: true);JSON 消化
将 JSON 连接到 Dataset
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
string jsonText = File.ReadAllText("dicom_data.json");
Dataset? dataset = DicomJsonSerializer.Deserialize(jsonText);将 JSON Stream 转换为 Dataset
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
using FileStream stream = File.OpenRead("dicom_data.json");
Dataset? dataset = DicomJsonSerializer.Deserialize(stream);将 JSON 转换为 DicomFile
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
string jsonText = File.ReadAllText("dicom_file.json");
DicomFile? dicomFile = DicomJsonSerializer.DeserializeFile(jsonText);将 JSON Array 转移到多个数据集
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
string jsonText = File.ReadAllText("dicom_array.json");
Dataset[]? datasets = DicomJsonSerializer.DeserializeList(jsonText);XML 序列化
DICOM 到 XML
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
DicomFile dcm = DicomFile.Open("patient_scan.dcm");
string xml = DicomXmlSerializer.Serialize(dcm.Dataset);XML 到 DICOM 数据集
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
string xmlText = File.ReadAllText("dicom_data.xml");
Dataset? dataset = DicomXmlSerializer.Deserialize(xmlText);Async 火焰
在网页应用和服务中的无同步操作:
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
// Async deserialization from stream
using FileStream stream = File.OpenRead("dicom_data.json");
Dataset? dataset = await DicomJsonSerializer.DeserializeAsync(stream);
// Async serialization to stream
using FileStream output = File.Create("output.json");
await DicomJsonSerializer.SerializeAsync(output, dataset);** 可用的 Async 方法:**
DeserializeAsync将 UTF-8 JSON 流向 DatasetDeserializeFileAsync将 UTF-8 JSON 流向 DicomFileDeserializeListAsync将 UTF-8 JSON 流向 Dataset 序列SerializeAsync序列数据集、DicomFile 或 Dataset 连接到 UTF-8 JSON 流
特性和功能性
DICOM Web 服务兼容性
转换器符合 DICOM PS3.18 (Web Services) 标准,确保兼容性与:
- 其余的DICOM Web API
- 基于云的PACS系统
- 现代医疗保健互动平台
- FHIR兼容系统
序列化选项
定制序列化行为与 DicomJsonSerializerOptions:
DicomJsonSerializerOptions options = new()
{
UseKeywordsAsJsonKeys = false, // Use tags instead of keywords
WriteKeyword = true, // Include keyword as separate attribute
WriteName = true, // Include tag name as separate attribute
NumberHandling = JsonNumberHandling.AsNumber // Number format
};
string json = DicomJsonSerializer.Serialize(dataset, options);| 选项 | 描述 |
|---|---|
UseKeywordsAsJsonKeys | 使用 DICOM 关键字而不是标签作为 JSON 密钥(非标准) |
WriteKeyword | 写 DICOM 标签作为单独的 JSON 属性 |
WriteName | 写 DICOM 标签名称作为不同的 JSON 属性 |
NumberHandling | 处理数字如 AsNumber 或 AsString |
BulkDataLoader | 在 BulkData 元素中提到的 blob 数据的加载器 |
BulkDataConverter | 编写数据作为 BulkData 参考的转换器 |
System.Text.Json 集成
使用标准 .NET JSON 序列化转换器:
using System.Text.Json;
using Aspose.Medical.Dicom.Serialization;
JsonSerializerOptions options = new();
options.Converters.Add(new DicomFileJsonConverter());
options.Converters.Add(new DatasetJsonConverter());
// Now use with JsonSerializer
string json = JsonSerializer.Serialize(dicomFile, options);支持的类型
| 入口类型 | 输出格式 |
|---|---|
DicomFile | JSON、XML |
Dataset | JSON、XML |
Dataset[] | JSON、XML |
数据保存
序列化精确保留:
- 所有 DICOM 标签和值
- 值代表性(VR)
- 沉默的序列
- 个人标签
- 大量数据参考
- 特殊浮动值(NaN,Infinity)
常用案例
- 网页观众:为基于浏览器的医学图像观看者提供DICOM数据服务。
- REST APIs:构建以 JSON 格式交换 DICOM 数据的医疗保健 API。
- 数据分析:在数据处理管道中进行分析的DICOM甲数据出口。
- 集成:将遗产PACS连接到现代基于云的医疗保健平台。
- Debugging:为解决问题创建人可阅读的DICOM数据代表。
- ** 存档**:存储 DICOM 数据在文档数据库中,如 MongoDB 或 Elasticsearch。
最佳实践
- 第一许可证:在任何转换之前启动测量授权,以避免评估限制。
- 使用流:对于大文件或网页服务,使用基于流的方法来提高记忆效率。
- Async 操作:在 Web 应用程序中使用 asynk 方法以避免阻止线条。
- 验证环游:测试序列化/排序周期以确保数据完整性。
- 标准遵守:使用默认选项,以确保 DICOM PS3.18 符合要求;非标准选择可能会破坏第三方承包商。
- UTF-8 编码:流方法使用 UTF-8,适合网页 API 和文件操作。
行动总结
| 行动 | Input | 出口 | 方法 |
|---|---|---|---|
| Serialize | Dataset | String / 流量 | Serialize |
| Serialize | DicomFile | String / 流量 | Serialize |
| Serialize | 数据集( ) | String / 流量 | Serialize |
| Deserialize | String / 流量 | Dataset | Deserialize |
| Deserialize | String / 流量 | DicomFile | DeserializeFile |
| Deserialize | String / 流量 | 数据集( ) | DeserializeList |
FAQ
**需要第三方图书馆吗?**它是一个单独的API,仅使用 .NET 内置的 JSON/XML 支持。
** JSON 输出是否符合 DICOM Web Services?**默认输出符合 DICOM PS3.18 规格。
** 可以自定义 JSON 密钥格式吗?**是的,使用 DicomJsonSerializerOptions 控制标签 vs. 关键词和额外属性。
** 已保留的序列?**是的,系列化器维持了完整的DICOM结构,包括粘着的序列。
** 如何处理大 DICOM 文件?**使用基于流的方法(Serialize(stream, ...) 和 DeserializeAsync( )为记忆效益处理。
** 是环游转换无损吗?**是的,序列化保留了所有 DICOM 数据,以便准确地撤回 Dataset 或 DicomFile 对象。