Hvordan man deserialiserer DICOM JSON tilbage til Dataset eller DicomFile
Denne tutorial viser, hvordan du deserialiserer DICOM JSON tilbage til Dataset eller DicomFile objekter ved hjælp af C#. Denne kapacitet er afgørende, når du har brug for at rekonstruere DIKOM-data fra jSON gemt i databaser eller modtaget fra web APIs.
Fordele ved JSON Deserialization
- Rekonstruktion af data *:- Gendannelse af DICOM-filer fra JSON gemt i databaser.
- Integration af API’er:- Process DICOM data modtaget som JSON fra webtjenester.
Rund-Trip forarbejdning:- Serialiser til JSON, ændrer og deserialiserer derefter tilbage til DICOM.
Forside: Forberedelse af miljøet
- Indstill Visual Studio eller ethvert kompatibelt .NET IDE.
- Skab et nyt .NET 8 applikationsprojekt.
- Installere Aspose.Medical fra NuGet Package Manager.
Forstå deserialiseringsmuligheder
DicomJsonSerializer giver forskellige deserialiseringsmetoder:
| Method | Input | Udgang | Brug af tilfælde |
|---|---|---|---|
Deserialize | JSON String | Dataset? | Datasæt fra JSON |
DeserializeFile | JSON String | DicomFile? | Komplet DICOM fil med meta info |
DeserializeList | JSON array strækning | Dataset[]? | Flere datasæt fra JSON array |
Step-by-step guide til deserialisering af DICOM JSON
Trin 1: Installation af Aspose.Medical
Tilføj Aspose.Medicinsk bibliotek til dit projekt ved hjælp af NuGet.
Install-Package Aspose.MedicalTrin 2: Indtast de nødvendige navneområder
Tilføj henvisninger til de krævede navneområder i din kode.
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;Trin 3: Læs JSON-indhold
Læs JSON-indholdet fra en fil eller variabel.
string jsonText = File.ReadAllText("patient_scan.json");Trin 4: Deserialiser til Dataset
Brug af Deserialize For at genopbygge et datasetobjekt.
Dataset? dataset = DicomJsonSerializer.Deserialize(jsonText);Trin 5: Arbejd med dataset
Få adgang til og manipulere den rekonstruerede datasæt.
if (dataset != null)
{
Console.WriteLine("Dataset successfully reconstructed from JSON.");
// Work with the dataset...
}Trin 6: Save Back to DICOM (Optionelt)
Skab en ny DicomFile og gem til disk.
if (dataset != null)
{
DicomFile newDcm = new DicomFile(dataset);
newDcm.Save("reconstructed.dcm");
}Komplet kode Eksempel: Deserialize Single Dataset
Her er et komplet eksempel på, hvordan man deserialiserer et enkelt datasæt:
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.");
}Deserialiser fuldstændig DicomFile
Når din JSON indeholder meta-oplysninger, skal du bruge 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");
}Deserialize JSON Array til flere datasæt
Når du arbejder med JSON aræer, der indeholder flere datasæt:
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 Eksempel: Serialize, Modify, Deserialize
En almindelig brug er at ændre DICOM-data via 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");
}Arbejde med databaseslagring
Deserialize DICOM JSON hentet fra en database:
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 Deserialisering til webapplikationer
For ASP.NET Core-applikationer bruger du async-metoder:
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
Behandling af malformede JSON
Altid blande deserialisering i try-catch blokke:
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}");
}Håndtering af Truncated JSON
For store JSON-filer skal du sørge for, at det komplette indhold læses:
// 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.");
}Kompatibilitet version
Sørg for, at JSON er genereret med en kompatibel version af serialiseren. Mismatched versioner kan forårsage deserialiseringsfejl.
Yderligere information
- Deserialiserede datasæt indeholder ikke pixeldata, medmindre det er indlejret i den oprindelige JSON.
- For produktionsanvendelse, gennemføre korrekt validering af JSON indtægter før deserialisering.
- Overvej caching deserialiserede datasæt for hyppigt tilgængelige data.
Konklusion
Denne tutorial har vist, hvordan man deserialiserer DICOM JSON tilbage til Dataset eller DicomFile objekter i C# ved hjælp af Aspose.Medical. Denne kapacitet muliggør runde-trip DIKOM data bearbejdning og seamless integration med jSON-baserede lagring og API-systemer.