Hur man konverterar DICOM till XML och tillbaka med DicomXmlSerializer
Denna tutorial visar hur man konverterar DICOM-filer till XML-format och deserialiserar XML tillbaka till C#. XML formatet är föredraget för integration med arvssystem, HL7 arbetsflöden och miljöer där XML verktyg är väl etablerade.
När ska man använda XML över JSON
- Lagstiftning om integration *:- Existerande middleware och system förväntar sig ofta XML-format.
HL7 Kompatibilitet- Hälso- och sjukvårdssystem som använder HL7 v2/v3 fungerar vanligtvis med XML.
*XML verktyg *:- Organisationer med etablerade XSLT-transformer och XPath-frågor.
- Validering av schema*- XML-scheman ger strikta valideringsförmågor.
Förutsättningar: Förbereda miljön
- Installera Visual Studio eller någon kompatibel .NET IDE.
- Skapa ett nytt .NET 8 konsolprogram.
- Installera Aspose.Medical från NuGet Package Manager.
Steg för steg guide för att konvertera DICOM till XML
Steg 1: Installera Aspose.Medical
Lägg till Aspose.Medicinska biblioteket till ditt projekt med NuGet.
Install-Package Aspose.MedicalSteg 2: Inkludera nödvändiga namnutrymmen
Lägg till hänvisningar till de nödvändiga namnutrymmenna i koden.
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;Steg 3: Ladda upp DICOM-filen
Ladda upp DICOM-filen du vill konvertera.
DicomFile dcm = DicomFile.Open("patient_scan.dcm");Steg 4: Serialisera till XML
Använd den DicomXmlSerializer.Serialize Metod för att konvertera till XML.
string xml = DicomXmlSerializer.Serialize(dcm.Dataset);Steg 5: Spara XML-utgången
Spara XML till en fil för lagring eller överföring.
File.WriteAllText("patient_scan.xml", xml);Steg 6: Deserialisera XML tillbaka till Dataset
För att konvertera XML tillbaka till DICOM, använd Deserialize Metoden är.
Dataset? dataset = DicomXmlSerializer.Deserialize(xml);Komplett kod Exempel: DICOM till XML Conversion
Här är ett komplett exempel på omvandling av DICOM till 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");Komplett kod Exempel: XML till DICOM konvertering
Här är ett komplett exempel på omvandling av XML tillbaka till 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.");
}Round-Trip Exempel: DICOM → XML → DIKOM
Fullständig omvandling som visar dataintegritet:
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");
}Exempel på XML utgångsstruktur
XML-utgången representerar DICOM-taggar i ett strukturerat format:
<?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>JSON vs XML Output jämförelse
Stora jämförelser
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 JSONAnvänd Case Recommendations
| Scenario | Rekommenderat format |
|---|---|
| Nya webbtjänster | JSON |
| Legacy PACS integration | XML |
| HL7 medelvärde | XML |
| JavaScript frontendor | JSON |
| XSLT omvandlingar | XML |
| NoSQL databaser | JSON |
| Schema Validering | XML |
Integration med legacy system
Exempel integration med legacy 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
Handling av invalid XML
Wrap deserialization i try-catch för felhantering:
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}");
}Karaktär kodning problem
Se till att korrekt kodning görs när du läser / skriver XML-filer:
// 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();
}Stora filhantering
För mycket stora DICOM-filer, överväga 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);
}Ytterligare information
- XML-format ger bättre mänsklig läsbarhet med rätt indentation.
- XML är mer verbos än JSON, vilket resulterar i större filstorlekar.
- Tänk på kompression för lagring eller överföring av stora XML-filer.
- Både JSON och XML stöder samma DICOM-datatyper och strukturer.
slutsatser
Denna tutorial har visat hur man konverterar DICOM-filer till XML-format och deserialiserar XML tillbaka till DicOM i C# med hjälp av Aspose.Medical.XML serialisering är nödvändig för att integrera med arvade hälso- och sjukvårdssystem och miljöer som förlitar sig på XML verktyg och arbetsflöden.