Wie Deserialisieren Sie DICOM JSON zurück zu Dataset oder DicomFile
Dieses Tutorial zeigt, wie man DICOM JSON zurück zu Dataset oder DicomFile Objekte mit C#. Diese Fähigkeit ist unerlässlich, wenn Sie die Daten von DIKOM von J SON, die in Datenbanken gespeichert oder von Web APIs empfangen werden, rekonstruieren müssen.
Vorteile der JSON Deserialisierung
• Datenrekonstruktion *:- Wiederherstellen von DICOM-Dateien aus JSON, die in Datenbanken gespeichert sind.
• API Integration *:- Die DICOM-Daten werden als JSON aus Webdienste verarbeitet.
- Round-Trip Verarbeitung*- Serialisieren Sie auf JSON, ändern Sie und dann wieder auf DICOM.
Voraussetzungen: Umwelt vorbereiten
- Installieren Sie Visual Studio oder eine kompatible .NET IDE.
- Erstellen Sie ein neues .NET 8-Konsole-Anwendungsprojekt.
- Installieren Sie Aspose.Medical vom NuGet Package Manager.
Verständnis der Deserialisierungsoptionen
Der DicomJsonSerializer bietet verschiedene Deserialisierungsmethoden an:
| Methode | Input | Ausgang | Gebrauchsfall |
|---|---|---|---|
Deserialize | JSON String | Dataset? | Einzigartige Datensätze von JSON |
DeserializeFile | JSON String | DicomFile? | Komplete DICOM Datei mit Meta-Info |
DeserializeList | JSON Array String | Dataset[]? | Mehrere Datensätze von JSON Array |
Schritt für Schritt Guide zur Deserialisierung von DICOM JSON
Schritt 1: Installieren Aspose.Medical
Fügen Sie die Aspose.Medical Bibliothek zu Ihrem Projekt mit NuGet hinzu.
Install-Package Aspose.MedicalSchritt 2: Inkludieren Sie notwendige Namenräume
Fügen Sie Referenzen zu den erforderlichen Namenräumen in Ihrem Code hinzu.
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;Schritt 3: Lesen Sie JSON-Content
Lesen Sie die JSON-Inhalte aus einem Datei oder einer Variable.
string jsonText = File.ReadAllText("patient_scan.json");Schritt 4: Deserialisieren zum Dataset
Use Deserialize Um ein Dataset-Objekt zu rekonstruieren.
Dataset? dataset = DicomJsonSerializer.Deserialize(jsonText);Schritt 5: Arbeiten mit dem Dataset
Zugang und Manipulation des rekonstruierten Datensatzes.
if (dataset != null)
{
Console.WriteLine("Dataset successfully reconstructed from JSON.");
// Work with the dataset...
}Schritt 6: Sparen Sie zurück zu DICOM (optional)
Erstellen Sie ein neues DicomFile und speichern Sie es auf den Disk.
if (dataset != null)
{
DicomFile newDcm = new DicomFile(dataset);
newDcm.Save("reconstructed.dcm");
}Komplete Code Beispiel: Deserialize Single Dataset
Hier ist ein vollständiges Beispiel, das zeigt, wie man ein einzelnes Datensatz deserialisiert:
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
// Read JSON from file
string jsonText = File.ReadAllText("patient_scan.json");
// Deserialize to Dataset
Dataset? dataset = DicomJsonSerializer.Deserialize(jsonText);
if (dataset != null)
{
Console.WriteLine("Dataset successfully deserialized!");
// Create a new DicomFile with the dataset
DicomFile newDcm = new DicomFile(dataset);
// Save to DICOM format
newDcm.Save("reconstructed_scan.dcm");
Console.WriteLine("Saved to reconstructed_scan.dcm");
}
else
{
Console.WriteLine("Failed to deserialize JSON.");
}Deserialisierung Complete DicomFile
Wenn Ihr JSON Datei-Meta-Informationen enthält, verwenden Sie DeserializeFile:
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
// Read JSON that includes file meta information
string jsonFileText = File.ReadAllText("complete_dicom.json");
// Deserialize to complete DicomFile
DicomFile? dicomFile = DicomJsonSerializer.DeserializeFile(jsonFileText);
if (dicomFile != null)
{
Console.WriteLine("DicomFile successfully deserialized!");
dicomFile.Save("reconstructed_complete.dcm");
}Deserialisieren JSON Array zu mehreren Datensätzen
Wenn Sie mit JSON arbeiten, enthalten sie mehrere Datensätze:
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
// Read JSON array
string jsonArrayText = File.ReadAllText("multiple_studies.json");
// Deserialize to Dataset array
Dataset[]? datasets = DicomJsonSerializer.DeserializeList(jsonArrayText);
if (datasets != null)
{
Console.WriteLine($"Deserialized {datasets.Length} datasets.");
// Save each dataset as a separate DICOM file
for (int i = 0; i < datasets.Length; i++)
{
DicomFile dcm = new DicomFile(datasets[i]);
dcm.Save($"study_{i:D3}.dcm");
}
Console.WriteLine("All datasets saved successfully!");
}Round-Trip Beispiel: Serialize, Modify, Deserialize
Ein allgemeines Gebrauchsfall ist die Änderung von DICOM-Daten über JSON:
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
using System.Text.Json;
// Load original DICOM file
DicomFile original = DicomFile.Open("original.dcm");
// Serialize to JSON
string json = DicomJsonSerializer.Serialize(original, writeIndented: true);
// Parse JSON for modification (using System.Text.Json)
using JsonDocument doc = JsonDocument.Parse(json);
// ... modify JSON as needed ...
// Deserialize back to Dataset
Dataset? modifiedDataset = DicomJsonSerializer.Deserialize(json);
if (modifiedDataset != null)
{
DicomFile modifiedDcm = new DicomFile(modifiedDataset);
modifiedDcm.Save("modified.dcm");
}Arbeiten mit Database Storage
Deserialize DICOM JSON von einer Datenbank erfasst:
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
// Simulating retrieval from database
string jsonFromDatabase = GetDicomJsonFromDatabase("patient_123");
Dataset? dataset = DicomJsonSerializer.Deserialize(jsonFromDatabase);
if (dataset != null)
{
// Process the reconstructed dataset
DicomFile dcm = new DicomFile(dataset);
dcm.Save("from_database.dcm");
Console.WriteLine("DICOM file reconstructed from database JSON.");
}
// Simulated database retrieval method
string GetDicomJsonFromDatabase(string patientId)
{
// In real implementation, this would query your database
return File.ReadAllText($"database_cache/{patientId}.json");
}Async Deserialisierung für Web-Anwendungen
Für ASP.NET Core-Anwendungen verwenden Sie Async-Methoden:
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
// Async deserialization from stream
public async Task<Dataset?> DeserializeFromStreamAsync(Stream jsonStream)
{
Dataset? dataset = await DicomJsonSerializer.DeserializeAsync(jsonStream);
return dataset;
}
// Usage in ASP.NET Core controller
[HttpPost("import")]
public async Task<IActionResult> ImportDicomJson()
{
Dataset? dataset = await DicomJsonSerializer.DeserializeAsync(Request.Body);
if (dataset != null)
{
// Process the dataset
return Ok("DICOM data imported successfully");
}
return BadRequest("Invalid DICOM JSON");
}Troubleshooting
Verarbeitung von malformierten JSON
Machen Sie immer die Deserialisierung in try-catch Blocks:
try
{
Dataset? dataset = DicomJsonSerializer.Deserialize(jsonText);
if (dataset == null)
{
Console.WriteLine("Deserialization returned null - check JSON format.");
}
}
catch (JsonException ex)
{
Console.WriteLine($"JSON parsing error: {ex.Message}");
}
catch (Exception ex)
{
Console.WriteLine($"Deserialization error: {ex.Message}");
}Verarbeitung von Truncated JSON
Für große JSON-Dateien stellen Sie sicher, dass vollständige Inhalte gelesen werden:
// Use ReadAllText for complete file content
string completeJson = File.ReadAllText("large_dicom.json");
// Verify JSON is complete (basic check)
if (!completeJson.TrimEnd().EndsWith("}") && !completeJson.TrimEnd().EndsWith("]"))
{
Console.WriteLine("Warning: JSON may be truncated.");
}Version Kompatibilität
Stellen Sie sicher, dass der JSON mit einer kompatiblen Version des Serialisers generiert wurde. Missverständliche Versionen können zu Deserialisierungsfehlern führen.
Zusätzliche Informationen
- Deserialisierte Datensätze enthalten keine Pixel-Daten, es sei denn, sie sind in den ursprünglichen JSON eingebaut.
- Für die Produktionsanwendung implementieren Sie vor der Deserialisierung eine geeignete Validierung von JSON-Einnahmen.
- Betrachten Sie das Caching deserialisierter Datensätze für häufig zugängliche Daten.
Schlussfolgerungen
Dieses Tutorial hat gezeigt, wie man DICOM JSON zurück zu Dataset oder DicomFile Objekte in C# mit Aspose.Medical dezerialisieren kann.Diese Fähigkeit ermöglicht Runde-Trip DicOM-Datenverarbeitung und Seamless-Integration mit jSON-basierten Speicher- und API-Systemen.