Hogyan lehet átalakítani a DICOM-t XML-re és vissza a DicomXmlSerializer használatával
Ez a kézikönyv azt mutatja, hogyan lehet átalakítani a DICOM fájlokat XML formátumban és deserializálni XML vissza a C# használatával.
Mikor kell XML-t használni a JSON-on keresztül
- A jogszabályi integráció:- A meglévő middleware és rendszerek gyakran várják az XML formátumot.
*HL7 kompatibilitás- Az egészségügyi rendszerek a HL7 v2/v3 rendszerint XML-vel működnek.
• XML szerszámok:- Szervezetek létrehozott XSLT átalakítások és XPath lekérdezések.
- A program érvényesítése:- Az XML rendszerek szigorú érvényesítési képességeket biztosítanak.
Előfeltételek: a környezet előkészítése
- A Visual Studio vagy bármely kompatibilis .NET IDE beállítása.
- Hozzon létre egy új .NET 8 konzol alkalmazási projektet.
- Telepítse az Aspose.Medical-t a NuGet csomagkezelőből.
Lépésről lépésre útmutató a DICOM XML-re való átalakításához
1. lépés: Install Aspose.Medical
Add hozzá az Aspose.Medical könyvtárat a projekthez a NuGet használatával.
Install-Package Aspose.Medical2. lépés: Tartalmazza a szükséges névterületeket
Hozzáadjon hivatkozásokat a szükséges névterületekhez a kódjában.
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;3. lépés: Töltse le a DICOM fájlt
Töltse le a DICOM fájlt, amelyet átalakítani szeretne.
DicomFile dcm = DicomFile.Open("patient_scan.dcm");4. lépés: Serializáljuk az XML-t
Használja a DicomXmlSerializer.Serialize Átalakítási módszer XML-re.
string xml = DicomXmlSerializer.Serialize(dcm.Dataset);5. lépés: mentse az XML kimenetet
Az XML-t egy fájl tárolására vagy továbbítására mentheti.
File.WriteAllText("patient_scan.xml", xml);6. lépés: Deserialize XML Back to Dataset
Ahhoz, hogy az XML-t vissza a DICOM-ra konvertáljuk, használjuk a Deserialize A módszer.
Dataset? dataset = DicomXmlSerializer.Deserialize(xml);Teljes kód példája: DICOM XML konverzió
Íme egy teljes példa a DICOM XML-re való átalakítására:
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");Teljes kód példája: XML a DICOM átalakítása
Íme egy teljes példa az XML átalakítására 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.");
}Következő bejegyzések: DICOM → XML → DIKOM
Teljes körforgásos átalakítás, amely bizonyítja az adatok integritását:
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");
}XML kimeneti szerkezet
Az XML kimeneti képviseli a DICOM címkéket strukturált formátumban:
<?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 és XML kimenetel összehasonlítása
méret összehasonlítás
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 JSONHasználat eseti ajánlások
| Scenario | Ajánlott formátum |
|---|---|
| Új webes szolgáltatások | JSON |
| Legacy PACS integráció | XML |
| HL7 középső | XML |
| JavaScript frontendszere | JSON |
| XSLT átalakulás | XML |
| NoSQL adatbázisok | JSON |
| A rendszer validálása | XML |
Integráció az öröklési rendszerekkel
Példa integráció örökség 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
Invalid XML kezelése
Vágja a deserializációt a try-catch-ban a hibás kezeléshez:
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}");
}Karakter kódolási kérdések
Biztosítsa a megfelelő kódolást az XML fájlok olvasásakor / írásakor:
// 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();
}Nagy fájlkezelés
Nagyon nagy DICOM fájlok, fontolja meg a 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);
}További információk
- Az XML formátum jobb emberi olvashatóságot biztosít a megfelelő indentációval.
- Az XML verbálisabb, mint a JSON, ami nagyobb fájlméreteket eredményez.
- Tekintse meg a tömörítést a nagy XML fájlok tárolására vagy továbbítására.
- Mind a JSON, mind az XML támogatja ugyanazokat a DICOM adattípusokat és szerkezeteket.
következtetések
Ez a kézikönyv megmutatta, hogyan lehet átalakítani a DICOM fájlokat XML formátumban és deserializálni XML vissza a C# használatával Aspose.Medical. XML serializáció nélkülözhetetlen az integráció örökség egészségügyi rendszerek és környezetek, amelyek támaszkodnak XML eszközök és munkafolyamatok.