Kā konvertēt DICOM uz XML un atpakaļ, izmantojot DicomXmlSerializer
Šis apmācība parāda, kā konvertēt DICOM failus XML formātā un deserializēt XML atpakaļ DIKOM, izmantojot C#. XML forma ir preferēts integrācijai ar mantojuma sistēmām, HL7 darba plūsmām un videi, kur XML rīki ir labi izveidoti.
Kad izmantot XML pār JSON
Legalitātes integrācija- Pastāvīgie middleware un sistēmas bieži sagaida XML formātu.
HL7 saderība- Veselības aprūpes sistēmas, izmantojot HL7 v2/v3, parasti darbojas ar XML.
- XML rīku izmantošana:- Organizācijas ar izveidotu XSLT transformāciju un XPath pieprasījumu.
- Programmas apstiprināšana *:- XML shēmas nodrošina stingras validācijas iespējas.
Priekšnoteikumi: Vides sagatavošana
- Iestatīt Visual Studio vai jebkuru saderīgu .NET IDE.
- Izveidojiet jaunu .NET 8 konsoles lietojumprogrammu projektu.
- Instalējiet Aspose.Medical no NuGet Package Manager.
Pakāpeniski ceļvedis, kā konvertēt DICOM uz XML
1. solis: instalēt Aspose.Medical
Pievienojiet Aspose.Medicīnas bibliotēku savam projektam, izmantojot NuGet.
Install-Package Aspose.Medical2. solis: Iekļaut nepieciešamos nosaukuma telpas
Pievienojiet atsauces uz pieprasītajiem nosaukuma telpām savā kodā.
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;3. solis: lejupielādēt DICOM failu
Lejupielādēt DICOM failu, kuru vēlaties konvertēt.
DicomFile dcm = DicomFile.Open("patient_scan.dcm");4. solis: Sērija uz XML
Izmantojiet DicomXmlSerializer.Serialize Metode, lai konvertētu XML.
string xml = DicomXmlSerializer.Serialize(dcm.Dataset);5. solis: saglabāt XML iznākumu
Saglabājiet XML failu uzglabāšanai vai pārsūtīšanai.
File.WriteAllText("patient_scan.xml", xml);6. solis: Deserializēt XML atpakaļ uz dataset
Lai konvertētu XML atpakaļ uz DICOM, izmantojiet Deserialize Metode ir.
Dataset? dataset = DicomXmlSerializer.Deserialize(xml);Kompletā koda piemērs: DICOM uz XML konversiju
Šeit ir pilns piemērs, kā konvertēt DICOM uz 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");Kompletā koda piemērs: XML uz DICOM konversiju
Šeit ir pilns piemērs, kā pārvērst XML atpakaļ 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.");
}Rond-Trip piemērs: DICOM → XML → DIKOM
Pilnīga apkārtējā pārveide, kas pierāda datu integritāti:
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");
}Piemērs XML iznākuma struktūra
XML iznākums pārstāv DICOM etiķetes strukturētā formātā:
<?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 un XML iznākumu salīdzinājums
lieluma salīdzinājums
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 JSONIzmantojiet gadījumu ieteikumus
| Scenario | Ieteicamā formāta |
|---|---|
| Jauni tīmekļa pakalpojumi | JSON |
| PACS integrācija | XML |
| HL7 vidēji | XML |
| JavaScript priekšrocības | JSON |
| XSLT transformācijas | XML |
| NoSQL datu bāze | JSON |
| Programmas validācija | XML |
Integrācija ar mantojuma sistēmām
Piemērs integrācija ar mantojumu 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
Neatbilstoša XML apstrāde
Wrap deserialization in try-catch for kļūdu apstrāde:
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}");
}Personības kodēšanas problēmas
Pārliecinieties par pareizu kodēšanu, lasot/rakstot XML failus:
// 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();
}Liela faila apstrāde
Par ļoti lieliem DICOM failiem, apsveriet streamu:
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);
}Papildu informācija
- XML formāts nodrošina labāku cilvēka lasamību ar pareizu indentāciju.
- XML ir vairāk verbas nekā JSON, kas izraisa lielāku failu izmēru.
- Apsveriet kompresiju, lai uzglabātu vai nosūtītu lielus XML failus.
- Gan JSON, gan XML atbalsta tos pašus DICOM datu veidus un struktūras.
Conclusion
Šī apmācība ir parādījusi, kā konvertēt DICOM failus XML formātā un deserializēt XML atpakaļ DIKOM C#, izmantojot Aspose.Medical.XML serializācija ir svarīga integrācijai ar mantinieku veselības aprūpes sistēmām un videi, kas balstās uz XML rīku un darba plūsmu.