Cum să convertiți DICOM în XML și înapoi folosind DicomXmlSerializator
Acest tutorial demonstrează cum să convertiți fișierele DICOM în format XML și să deserializeze XML înapoi la C#. formatul XML este preferat pentru integrarea cu sistemele de moștenire, fluxurile de lucru HL7 și mediile în care instrumentele XML sunt bine stabilite.
Când să utilizați XML pe JSON
- Integrație legală *:- Sistemele și mijloacele existente așteaptă adesea format XML.
** Compatibilitate cu HL7**:- Sistemele de îngrijire a sănătății folosind HL7 v2/v3 funcționează de obicei cu XML.
Cuvânt cheie: XML Tooling- Organizații cu transformări XSLT stabilite și întrebări XPath.
• Validarea schemei:- Schemele XML oferă capacități stricte de validare.
Etichetă: pregătirea mediului
- Instalați Visual Studio sau orice IDE compatibil .NET.
- Creați un nou proiect de aplicații .NET 8 console.
- Instalați Aspose.Medical de la NuGet Package Manager.
Ghidul pas cu pas pentru a converti DICOM în XML
Pasul 1: Instalați Aspose.Medical
Adăugați biblioteca Aspose.Medical la proiectul dvs. folosind NuGet.
Install-Package Aspose.MedicalPasul 2: Includeți spațiile de nume necesare
Adăugați referințe la spațiile de nume necesare în codul dvs.
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;Pasul 3: Încărcați fișierul DICOM
Încărcați fișierul DICOM pe care doriți să-l convertiți.
DicomFile dcm = DicomFile.Open("patient_scan.dcm");Pasul 4: Serializarea la XML
Foloseşte-l pe DicomXmlSerializer.Serialize Metoda de conversie în XML.
string xml = DicomXmlSerializer.Serialize(dcm.Dataset);Pasul 5: Salvați rezultatul XML
Salvați XML într-un fișier pentru stocare sau transmisie.
File.WriteAllText("patient_scan.xml", xml);Pasul 6: Deserializarea XML înapoi la Dataset
Pentru a converti XML în DICOM, utilizați Deserialize metodă.
Dataset? dataset = DicomXmlSerializer.Deserialize(xml);Exemplu complet de cod: DICOM în XML Conversion
Iată un exemplu complet de conversie DICOM în 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");Exemplu complet de cod: XML în DICOM Conversion
Iată un exemplu complet pentru conversia XML înapoi la 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.");
}Cuvânt cheie: DICOM → XML → DIKOM
Conversia completă rotundă demonstrează integritatea datelor:
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");
}Exemplul structurii de ieșire XML
Rezultatul XML reprezintă etichetele DICOM într-un format structurat:
<?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>Compararea rezultatelor JSON/XML
Dimensiune comparativă
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 JSONRecomandări pentru cazuri
| Scenario | Formatul recomandat |
|---|---|
| Noile servicii web | JSON |
| Integrarea PACS | XML |
| HL7 mijlocii | XML |
| Cuvânt cheie JavaScript frontends | JSON |
| Transformarea XSLT | XML |
| NoSQL bază de date | JSON |
| Validarea schemei | XML |
Integrație cu sistemele Legacy
Exemple de integrare cu 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
Gestionarea XML invalidă
Încărcați deserializarea în try-catch pentru gestionarea erorilor:
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}");
}Caracter codificarea problemelor
Asigurați-vă că codificarea corectă atunci când citiți / scrieți fișierele 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();
}prelucrarea fișierelor mari
Pentru fișierele DICOM foarte mari, luați în considerare 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);
}Informații suplimentare
- Formatul XML oferă o mai bună readabilitate umană cu indentația corespunzătoare.
- XML este mai verbos decât JSON, ceea ce duce la dimensiuni mai mari de fișiere.
- Considerați compresia pentru stocarea sau transmiterea fișierelor XML mari.
- Amândouă JSON și XML susțin aceleași tipuri de date și structuri DICOM.
concluziile
Acest tutorial a arătat cum să convertiți fișierele DICOM în format XML și să deserializeze XML înapoi în C# folosind Aspose.Medical. serializarea XML este esențială pentru integrarea cu sistemele de sănătate moștenite și mediile care se bazează pe XML tooling și fluxurile de lucru.