Як знеструмлювати DICOM JSON назад до Dataset або DicomFile
Цей навчальний заклад показує, як дезеріалізувати DICOM JSON назад до об’єктів Dataset або DicomFile за допомогою C#. Ця здатність є необхідною, коли вам потрібно реконструювати дані DIKOM з J SON, що зберігаються в базах даних або отримані з веб-API.
Переваги JSON Deserialization
• Реабілітація даних:- Відновлення файлів DICOM з JSON, що зберігаються в базах даних.
• Інтеграція API:- Процесувати дані DICOM, отримані в якості JSON з веб-сервісів.
- Роунд-Тріп обробка *- Серіалізуйте до JSON, модифікуйте, а потім знеструмлюйте назад до DICOM.
Докладніше: Підготовка навколишнього середовища
- Налаштування Visual Studio або будь-якого сумісного .NET IDE.
- Створення нового проекту .NET 8 консолі.
- Завантажити Aspose.Medical з NuGet Package Manager.
Визначення варіантів десертації
DicomJsonSerializer пропонує різні методи дезеріалізації:
| Метод | Input | Вихід | Використання випадків |
|---|---|---|---|
Deserialize | JSON стрічка | Dataset? | Створення JSON |
DeserializeFile | JSON стрічка | DicomFile? | Завантажити файл з мета-інформацією |
DeserializeList | Створення JSON Array String | Dataset[]? | Кількість даних з JSON Array |
Крок за кроком Посібник для дезеріалізації DICOM JSON
Крок 1: Інсталяція Aspose.Medical
Додайте бібліотеку Aspose.Medical до вашого проекту за допомогою NuGet.
Install-Package Aspose.MedicalКрок 2: Включити необхідні іменні простори
Додайте посилання на необхідні іменні простори у вашому коді.
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;Крок 3: Читати JSON контент
Прочитайте JSON-контент з файлу або змінної.
string jsonText = File.ReadAllText("patient_scan.json");Крок 4: Дезеріалізація до Dataset
Користувати Deserialize Реконструкція об’єкта Dataset.
Dataset? dataset = DicomJsonSerializer.Deserialize(jsonText);Крок 5: Робота з даними
Доступ і маніпуляція реконструйованого набору даних.
if (dataset != null)
{
Console.WriteLine("Dataset successfully reconstructed from JSON.");
// Work with the dataset...
}Крок 6: Зберегти назад до DICOM (опціональний)
Створіть новий DicomFile і збережіть його на диску.
if (dataset != null)
{
DicomFile newDcm = new DicomFile(dataset);
newDcm.Save("reconstructed.dcm");
}Повний код Приклад: Deserialize Single 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.");
}Створення Complete DicomFile
Коли ваш JSON містить мета-інформацію файлу, використовуйте 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 to Multiple Datasets
При роботі з JSON висвітлюється, що містить кілька наборів даних:
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!");
}Роунд-Тріп Приклад: Serialize, Modify, Deserialize
Найпоширенішим випадком використання є зміна даних DICOM через 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");
}Робота з зберіганням баз даних
Дезеріалізуйте DICOM JSON, отриманий з бази даних:
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 Deserialization для веб-прикладів
Для додатків ASP.NET Core використовуйте методи асинку:
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
Зловживання зловмисними JSON
Завжди втілюйте десертацію в блоках try-catch:
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}");
}Створення Truncated JSON
Для великих файлів JSON, переконайтеся, що повний вміст читається:
// 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.");
}Версія сумісності
Переконайтеся, що JSON був створений з сумісною версією серіалізатора. Несумісні версії можуть викликати недоліки дееріалізації.
Додаткова інформація
- Дезеріалізовані дані не містять піксельних даних, якщо вони не вбудовані в оригінальний JSON.
- Для виробництва використовуйте правильну валідацію входу JSON перед дезеріалізацією.
- Розглянемо кешінг десертизованих наборів даних для часто доступних даних.
Заключення
Цей навчальний заклад показав, як знеструмлювати DICOM JSON назад до об’єктів Dataset або DicomFile в C# за допомогою Aspose.Medical.Ця здатність дозволяє круглий шлях обробки даних і безперервної інтеграції з системами зберігання та API, заснованими на JSon.