Cách chuyển đổi DICOM sang XML và Back bằng cách sử dụng DicomXmlSerializer

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.Medical

Bướ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 JSON

Sử dụng Case Recommendations

ScenarioĐịnh dạng khuyến cáo
Dịch vụ web mớiJSON
Phân tích PACSXML
HL7 trung gianXML
Giới thiệu JavaScript frontendsJSON
XSLT chuyển đổiXML
Cơ sở dữ liệu NoSQLJSON
Chế độ validationXML

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.

 Tiếng Việt