Kako pretvoriti DICOM u XML i nazad pomoću DicomXmlSerializer
Ovaj tutorial pokazuje kako pretvoriti DICOM datoteke u XML format i deserializirati XML nazad na DIKOM pomoću C#. format XML je preferiran za integraciju s nasljednim sustavima, HL7 radnim tokovima i okruženjima gdje je XML alata dobro postavljena.
Kada koristiti XML preko JSON-a
• Zakonodavna integracija:- Postojeći middleware i sustavi često očekuju XML format.
HL7 kompatibilnost:- Zdravstveni sustavi koji koriste HL7 v2/v3 obično rade s XML-om.
*XML alat za korištenje:- Organizacije s uspostavljenim XSLT transformacijama i XPath upitima.
- Proizvodi za potvrdu programa:- XML sheme pružaju stroge validacijske sposobnosti.
Predviđanja: Priprema za okoliš
- Sastavite Visual Studio ili bilo koji kompatibilni .NET IDE.
- Stvorite novi .NET 8 konzol aplikacijski projekt.
- Instalirajte Aspose.Medical iz upravitelja paketa NuGet.
Korak po korak vodič za pretvaranje DICOM-a u XML
Korak 1: Instalirati Aspose.Medical
Dodajte Aspose.Medical knjižnicu u svoj projekt pomoću NuGeta.
Install-Package Aspose.MedicalKorak 2: Uključite potrebne nazivne prostore
Dodajte upute potrebnim nazivnim prostorima u vašem kodu.
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;Korak 3: Preuzmite DICOM datoteku
Preuzmite DICOM datoteku koju želite pretvoriti.
DicomFile dcm = DicomFile.Open("patient_scan.dcm");Korak 4: Serializirajte se na XML
Koristite ga DicomXmlSerializer.Serialize Metoda za pretvaranje u XML.
string xml = DicomXmlSerializer.Serialize(dcm.Dataset);Korak 5: Sačuvajte XML izlaz
Shrani XML u datoteku za skladištenje ili prijenos.
File.WriteAllText("patient_scan.xml", xml);Korak 6: Deserializirajte XML nazad na Dataset
Da biste pretvorili XML nazad u DICOM, koristite Deserialize Metoda je.
Dataset? dataset = DicomXmlSerializer.Deserialize(xml);Kompletni primjer koda: DICOM na XML konverzija
Ovdje je potpuni primjer za pretvaranje DICOM-a u 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");Popuniti primjer koda: XML na DICOM konverzija
Ovdje je potpuni primjer za pretvaranje XML-a natrag u 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.");
}Sljedeći članakDikom → XML → Dicom
Kompletna konverzija okrugla traka koja dokazuje integritet podataka:
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");
}Primjer XML izlazna struktura
Izlazak XML predstavlja DICOM oznake u strukturiranom formatu:
<?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>Sljedeći Članak JSON vs XML Output
Veličina usporedbe
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 JSONPreporuke za korištenje slučaja
| Scenario | Preporučeni format |
|---|---|
| Nova web usluga | JSON |
| Povijest PACS integracije | XML |
| HL7 srednjeg dijela | XML |
| javascript frontendovi | JSON |
| XSLT transformacije | XML |
| NoSQL baze podataka | JSON |
| Validacija programa | XML |
Integracija s sustavima naslijeđa
Primjer integracije s naslijeđenjem 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
Obavijest o invalidnom XML-u
Uklanjanje deserializiranja u try-catch za rješavanje pogrešaka:
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}");
}Povijest kodiranja problema
Osigurajte ispravno kodiranje prilikom čitanja/pisivanja XML datoteka:
// 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();
}Velika obrada datoteke
Za vrlo velike DICOM datoteke, razmislite o prijenosu:
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);
}Dodatne informacije
- XML format pruža bolju ljudsku čitljivost s odgovarajućom indentacijom.
- XML je verbalniji od JSON-a, što dovodi do veće veličine datoteke.
- Razmotrite kompresije za skladištenje ili prijenos velikih XML datoteka.
- I JSON i XML podržavaju iste DICOM vrste podataka i strukture.
zaključak
Ovaj tutorial je pokazao kako pretvoriti DICOM datoteke u XML format i deserializirati XML natrag u C# pomoću Aspose.Medical.XML serialization je neophodna za integraciju s naslijeđenim zdravstvenim sustavima i okruženjima koje se oslanjaju na XML alate i radne tokove.