Hur man deserialiserar DICOM JSON tillbaka till Dataset eller DicomFile
Denna tutorial visar hur man deserialiserar DICOM JSON tillbaka till Dataset eller DicomFile objekt med hjälp av C#. Denna kapacitet är nödvändig när du behöver för att rekonstruera DIKOM-data från jSON som lagras i databaser eller mottagits från web APIs.
Fördelar med JSON Deserialization
- Dataåteruppbyggnad *- Återställa DICOM-filer från JSON som lagras i databaser.
• API Integration *:- Processera DICOM-data som mottagits som JSON från webbtjänster.
**Rund-Trip bearbetning *- Serialisera till JSON, modifiera och sedan deserializera tillbaka till DICOM.
Förutsättningar: Förbereda miljön
- Installera Visual Studio eller någon kompatibel .NET IDE.
- Skapa ett nytt .NET 8 konsolprogram.
- Installera Aspose.Medical från NuGet Package Manager.
Förstå deserialiseringsalternativ
DicomJsonSerializer ger olika deserialiseringsmetoder:
| Metod | Input | Utgång | Använda fall |
|---|---|---|---|
Deserialize | JSON sträng | Dataset? | Enstaka dataset från JSON |
DeserializeFile | JSON sträng | DicomFile? | Komplett DICOM-fil med meta info |
DeserializeList | JSON array sträng | Dataset[]? | Multiple datasets från JSON array |
Steg-för-steg guide för att deserialisera DICOM JSON
Steg 1: Installera Aspose.Medical
Lägg till Aspose.Medicinska biblioteket till ditt projekt med NuGet.
Install-Package Aspose.MedicalSteg 2: Inkludera nödvändiga namnutrymmen
Lägg till hänvisningar till de nödvändiga namnutrymmenna i koden.
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;Steg 3: Läs JSON innehåll
Läs JSON-innehållet från en fil eller variabel.
string jsonText = File.ReadAllText("patient_scan.json");Steg 4: Deserialisera till Dataset
Användning Deserialize att återställa ett Dataset-objekt.
Dataset? dataset = DicomJsonSerializer.Deserialize(jsonText);Steg 5: Arbeta med dataset
Tillgång och manipulering av den ombyggda dataset.
if (dataset != null)
{
Console.WriteLine("Dataset successfully reconstructed from JSON.");
// Work with the dataset...
}Steg 6: Spara tillbaka till DICOM (alternativ)
Skapa en ny DicomFile och spara på disken.
if (dataset != null)
{
DicomFile newDcm = new DicomFile(dataset);
newDcm.Save("reconstructed.dcm");
}Komplett kod Exempel: Deserialize Single Dataset
Här är ett komplett exempel som visar hur man deserialiserar en enda dataset:
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.");
}Deserialisera Complete DicomFile
När din JSON innehåller meta-information i filen, använd 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");
}Deserialisera JSON Array till flera datasets
När du arbetar med JSON rader som innehåller flera dataset:
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 Exempel: Serialize, Modify, Deserialize
Ett vanligt användningsfall är att ändra 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");
}Arbeta med databaslagring
Deserialize DICOM JSON hämtat från en databas:
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 för webbapplikationer
För ASP.NET Core-applikationer, använd 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 av skadad JSON
Alltid inkräkt deserialisering i try-catch block:
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}");
}Handling Truncated JSON
För stora JSON-filer, se till att komplett innehåll läsas:
// 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 kompatibilitet
Se till att JSON genereras med en kompatibel version av serialisatorn. Felversioner kan orsaka deserialiseringsfel.
Ytterligare information
- Deserialiserade dataset innehåller inte pixeldata om det inte är inbäddat i den ursprungliga JSON.
- För produktionsanvändning, genomföra korrekt validering av JSON input före deserialisering.
- Tänk på att caching deserialiserade dataset för ofta åtkomna data.
slutsatser
Denna handledning har visat hur man deserialiserar DICOM JSON tillbaka till Dataset eller DicomFile objekt i C# med hjälp av Aspose.Medical. Denna kapacitet möjliggör rundvägs databehandling och trådlös integration med JSon-baserade lagring och API-system.