Cách chuyển đổi DICOM sang XML và Back bằng cách sử dụng DicomXmlSerializer
Hướng dẫn này cho thấy làm thế nào để chuyển đổi các tập tin DICOM sang định dạng XML và deserialize XML trở lại với DicOM bằng cách sử dụng C#. định hình XML được ưu tiên cho sự tích hợp với các hệ thống di sản, dòng công việc HL7, và môi trường nơi công cụ XML đã được thiết lập tốt.
Khi nào để sử dụng XML trên JSON
- Phân tích hợp pháp *:- Các middleware hiện có và các hệ thống thường mong đợi định dạng XML.
H7 tương thích:- Hệ thống chăm sóc sức khỏe sử dụng HL7 v2/v3 thường hoạt động với XML.
- Công cụ XML:- Các tổ chức với thiết lập XSLT chuyển đổi và truy vấn XPath.
- Chứng nhận kế hoạch *:- Các chương trình XML cung cấp các khả năng xác thực nghiêm ngặt.
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.
Hướng dẫn từng bước để chuyển đổi DICOM sang XML
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: Tải file DICOM
Tải xuống tệp DICOM bạn muốn chuyển đổi.
DicomFile dcm = DicomFile.Open("patient_scan.dcm");Bước 4: Tập trung vào XML
Sử dụng The DicomXmlSerializer.Serialize Cách chuyển đổi sang XML
string xml = DicomXmlSerializer.Serialize(dcm.Dataset);Bước 5: Giữ xml output
Lưu XML vào một tệp để lưu trữ hoặc truyền.
File.WriteAllText("patient_scan.xml", xml);Bước 6: Deserialize XML Back to Dataset
Để chuyển đổi XML trở lại thành DICOM, sử dụng Deserialize Phương pháp.
Dataset? dataset = DicomXmlSerializer.Deserialize(xml);Mẫu mã đầy đủ: DICOM sang XML Conversion
Dưới đây là một ví dụ đầy đủ về việc chuyển đổi DICOM sang XML:
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
// Load DICOM file
DicomFile dcm = DicomFile.Open("patient_scan.dcm");
// Convert to XML
string xml = DicomXmlSerializer.Serialize(dcm.Dataset);
// Save to file
File.WriteAllText("patient_scan.xml", xml);
Console.WriteLine("DICOM converted to XML successfully!");
Console.WriteLine($"Output saved to: patient_scan.xml");Mẫu mã đầy đủ: XML sang DICOM Conversion
Dưới đây là một ví dụ đầy đủ về việc chuyển đổi XML trở lại DICOM:
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
// Read XML from file
string xml = File.ReadAllText("patient_scan.xml");
// Deserialize to Dataset
Dataset? dataset = DicomXmlSerializer.Deserialize(xml);
if (dataset != null)
{
// Create DicomFile from Dataset
DicomFile dcm = new DicomFile(dataset);
// Save as DICOM file
dcm.Save("reconstructed.dcm");
Console.WriteLine("XML converted back to DICOM successfully!");
}
else
{
Console.WriteLine("Failed to deserialize XML.");
}Ví dụ điển hình: DICOM → XML → DIKOM
Chuyển đổi vòng tròn hoàn chỉnh chứng minh tính toàn vẹn dữ liệu:
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
// Load original DICOM file
DicomFile original = DicomFile.Open("original_scan.dcm");
Console.WriteLine("Original DICOM loaded.");
// Convert to XML
string xml = DicomXmlSerializer.Serialize(original.Dataset);
Console.WriteLine($"Converted to XML ({xml.Length} characters).");
// Save XML (for transmission or storage)
File.WriteAllText("intermediate.xml", xml);
// Later: Deserialize XML back to Dataset
string loadedXml = File.ReadAllText("intermediate.xml");
Dataset? reconstructedDataset = DicomXmlSerializer.Deserialize(loadedXml);
if (reconstructedDataset != null)
{
// Create new DicomFile
DicomFile reconstructed = new DicomFile(reconstructedDataset);
reconstructed.Save("reconstructed_scan.dcm");
Console.WriteLine("Round-trip complete: DICOM → XML → DICOM");
}Mô tả XML Output Structure
Kết quả XML đại diện cho các thẻ DICOM trong một định dạng có cấu trúc:
<?xml version="1.0" encoding="utf-8"?>
<NativeDicomModel>
<DicomAttribute tag="00080005" vr="CS" keyword="SpecificCharacterSet">
<Value number="1">ISO_IR 100</Value>
</DicomAttribute>
<DicomAttribute tag="00080020" vr="DA" keyword="StudyDate">
<Value number="1">20240115</Value>
</DicomAttribute>
<DicomAttribute tag="00100010" vr="PN" keyword="PatientName">
<PersonName number="1">
<Alphabetic>
<FamilyName>DOE</FamilyName>
<GivenName>JOHN</GivenName>
</Alphabetic>
</PersonName>
</DicomAttribute>
<DicomAttribute tag="00100020" vr="LO" keyword="PatientID">
<Value number="1">12345</Value>
</DicomAttribute>
</NativeDicomModel>So sánh JSON vs XML Output
Size so sánh
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
DicomFile dcm = DicomFile.Open("sample.dcm");
string json = DicomJsonSerializer.Serialize(dcm);
string xml = DicomXmlSerializer.Serialize(dcm.Dataset);
Console.WriteLine($"JSON size: {json.Length:N0} characters");
Console.WriteLine($"XML size: {xml.Length:N0} characters");
// XML is typically 20-40% larger than JSONSử dụng Case Recommendations
| Scenario | Định dạng khuyến cáo |
|---|---|
| Dịch vụ web mới | JSON |
| Phân tích PACS | XML |
| HL7 trung gian | XML |
| Giới thiệu JavaScript frontends | JSON |
| XSLT chuyển đổi | XML |
| Cơ sở dữ liệu NoSQL | JSON |
| Chế độ validation | XML |
Kết hợp với Legacy Systems
Ví dụ về sự tích hợp với thừa kế middleware:
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
using System.Net.Http;
using System.Text;
DicomFile dcm = DicomFile.Open("patient_scan.dcm");
string xml = DicomXmlSerializer.Serialize(dcm.Dataset);
// Send to legacy SOAP service
using HttpClient client = new();
var content = new StringContent(xml, Encoding.UTF8, "application/xml");
HttpResponseMessage response = await client.PostAsync(
"http://legacy-pacs/dicom/import",
content
);
if (response.IsSuccessStatusCode)
{
Console.WriteLine("XML successfully sent to legacy system!");
}Troubleshooting
Hướng dẫn sử dụng Invalid XML
Wrap deserialization in try-catch for error xử lý:
try
{
Dataset? dataset = DicomXmlSerializer.Deserialize(xml);
if (dataset == null)
{
Console.WriteLine("Deserialization returned null.");
}
}
catch (System.Xml.XmlException ex)
{
Console.WriteLine($"XML parsing error: {ex.Message}");
}
catch (Exception ex)
{
Console.WriteLine($"Deserialization error: {ex.Message}");
}Charakter Encoding Vấn đề
Đảm bảo mã hóa thích hợp khi đọc / viết tệp XML:
// Write with explicit encoding
using (StreamWriter writer = new StreamWriter("output.xml", false, Encoding.UTF8))
{
writer.Write(xml);
}
// Read with explicit encoding
using (StreamReader reader = new StreamReader("input.xml", Encoding.UTF8))
{
string xml = reader.ReadToEnd();
}xử lý file lớn
Đối với các tệp DICOM rất lớn, xem xét streaming:
using (FileStream fs = File.Create("large_output.xml"))
using (StreamWriter writer = new StreamWriter(fs, Encoding.UTF8))
{
string xml = DicomXmlSerializer.Serialize(dcm.Dataset);
writer.Write(xml);
}Thông tin bổ sung
- Định dạng XML cung cấp khả năng đọc tốt hơn cho con người với indentation thích hợp.
- XML nhiều hơn JSON, dẫn đến kích thước tệp lớn hơn.
- Hãy xem xét việc nén để lưu trữ hoặc truyền tải các tệp XML lớn.
- Cả JSON và XML đều hỗ trợ cùng các loại dữ liệu và cấu trúc DICOM.
Kết luận
Hướng dẫn này đã chứng minh làm thế nào để chuyển đổi các tệp DICOM sang định dạng XML và deserialize XML trở lại với C# bằng cách sử dụng Aspose.Medical.XML serialization là cần thiết cho việc tích hợp với hệ thống chăm sóc sức khỏe di sản và môi trường dựa trên XML công cụ và dòng công việc.