Как десертировать DICOM JSON обратно в Dataset или DicomFile
Этот урок показывает, как десертировать DICOM JSON обратно к объектам Dataset или DicomFile с использованием C#. Эта способность необходима, когда вам нужно воссоздать данные ДИКОМ из jSON, хранящихся в базах данных или полученных из веб-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? | Заполнить файл DICOM с мета-инфо |
DeserializeList | JSON Array Стриг | 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: Deserialize в Dataset
Использование Deserialize Для восстановления объекта Dataset.
Dataset? dataset = DicomJsonSerializer.Deserialize(jsonText);Шаг 5: Работа с Dataset
Доступ и манипулирование реконструированным набором данных.
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 до нескольких сетей данных
При работе с 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!");
}Пример круглой поездки: сериализация, модификация, дезориентация
Обычным примером использования является модификация данных 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");
}Работа с хранилищем базы данных
Deserialize 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}");
}Скриншоты 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 был создан с совместимой версией сериализатора. Несовместимые версии могут вызвать неисправности.
Дополнительная информация
- Deserialized datasets не включают в себя пиксельные данные, если они не были встроены в оригинальный JSON.
- Для использования в производстве, выполните правильную валидацию JSON ввода перед десертификацией.
- Рассмотрим кеширование десертированных сетей данных для часто доступных данных.
Заключение
Этот урок показал, как десертизировать DICOM JSON обратно в Dataset или DicomFile объекты в C# с помощью Aspose.Medical. Эта способность позволяет круглый путь обработки ДИКОМ данных и беспроводной интеграции с базами хранения и АПИ систем.