Как десертировать DICOM JSON обратно в Dataset или DicomFile

Как десертировать 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ВыходИспользование случая
DeserializeJSON СтригDataset?Единый набор данных JSON
DeserializeFileJSON СтригDicomFile?Заполнить файл DICOM с мета-инфо
DeserializeListJSON 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. Эта способность позволяет круглый путь обработки ДИКОМ данных и беспроводной интеграции с базами хранения и АПИ систем.

 Русский