Jak przekonwertować DICOM do XML i z powrotem za pomocą DicomXml
Ten podręcznik pokazuje, jak konwertować pliki DICOM do formatu XML i deserializować XML z powrotem do DIKOM za pomocą C#. format XML jest preferowany do integracji z systemami dziedzictwa, przepływami pracy HL7 i środowiskami, w których narzędzia XML są dobrze ustawione.
Kiedy używać XML przez JSON
- Integracja ustawodawcza*- Istniejące media i systemy często oczekują formatu XML.
- kompatybilność HL7*- Systemy opieki zdrowotnej za pomocą HL7 v2/v3 zwykle pracują z XML.
- Zestaw narzędzi XML:- Organizacje z ustalonymi transformacjami XSLT i zapytaniami XPath.
- Wniosek o zatwierdzenie schematu *:- Schematy XML zapewniają rygorystyczne możliwości weryfikacji.
Wymagania: przygotowanie środowiska
- Zainstaluj program Visual Studio lub dowolny kompatybilny .NET IDE.
- Stwórz nowy projekt aplikacji konsoli .NET 8.
- Instaluj Aspose.Medical z programu NuGet Package Manager.
Krok po kroku Przewodnik do konwersji DICOM do XML
Krok 1: Instalacja Aspose.Medical
Dodaj do projektu bibliotekę Aspose.Medical za pomocą NuGet.
Install-Package Aspose.MedicalKrok 2: Włącz niezbędne przestrzenie nazwowe
Dodaj odniesienia do wymaganych przestrzeni nazwowych w kodzie.
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;Krok 3: Pobierz plik DICOM
Pobierz plik DICOM, który chcesz konwertować.
DicomFile dcm = DicomFile.Open("patient_scan.dcm");Krok 4: Serializuj się do XML
Korzystaj z DicomXmlSerializer.Serialize Metoda konwersji do XML.
string xml = DicomXmlSerializer.Serialize(dcm.Dataset);Krok 5: Zapisz wyjście XML
Zapisz XML do pliku do przechowywania lub przesyłania.
File.WriteAllText("patient_scan.xml", xml);Krok 6: Deserializuj XML z powrotem do zestawu danych
Aby przekonwertować XML z powrotem do DICOM, użyj Deserialize metodą.
Dataset? dataset = DicomXmlSerializer.Deserialize(xml);Pełny przykład kodu: DICOM do konwersji XML
Oto kompletny przykład konwersji DICOM do 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");Pełny przykład kodu: konwersja XML do DICOM
Oto kompletny przykład konwersji XML z powrotem do 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.");
}Przykłady: DICOM → XML → DIKOM
Kompletna konwersja okrągła, która pokazuje integralność danych:
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");
}Przykłady struktury wyjścia XML
Wydajność XML reprezentuje tagy DICOM w zorganizowanym formacie:
<?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>Porównanie JSON vs XML Output
Wielkość porównania
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 JSONZalecenia dotyczące przypadków
| Scenario | Zalecany format |
|---|---|
| Nowe usługi internetowe | JSON |
| Integracja PACS | XML |
| HL7 średniowód | XML |
| JavaScript Frontendy | JSON |
| Transformacja XSLT | XML |
| NoSQL bazy danych | JSON |
| Validacja schematu | XML |
Integracja z systemami dziedziczenia
Przykłady integracji z dziedzictwem 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
Nieprawidłowe przetwarzanie XML
Włóż deserializację w try-catch dla rozwiązywania błędów:
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}");
}Charakter kodowania problemów
Zapewnij odpowiednie kodowanie podczas czytania / pisania plików 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();
}Duża obsługa plików
Dla bardzo dużych plików DICOM, rozważ strumieniowanie:
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);
}Dodatkowe informacje
- Format XML zapewnia lepszą ludzką czytelność z odpowiednią indentacją.
- XML jest bardziej verbowy niż JSON, co powoduje większe rozmiary plików.
- Rozważ kompresję do przechowywania lub przesyłania dużych plików XML.
- Zarówno JSON, jak i XML obsługują te same typy danych i struktury DICOM.
konkluzja
Ten tutorial wykazał, jak przekonwertować pliki DICOM do formatu XML i deserializować XML z powrotem do C# za pomocą Aspose.Medical.XML serializacja jest niezbędna do integracji z dziedzicznymi systemami opieki zdrowotnej i środowiskami, które opierają się na narzędziach i przepływach pracy XML.