Як знеструмлювати DICOM JSON назад до Dataset або DicomFile

Як знеструмлювати 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ВихідВикористання випадків
DeserializeJSON стрічкаDataset?Створення JSON
DeserializeFileJSON стрічкаDicomFile?Завантажити файл з мета-інформацією
DeserializeListСтворення JSON Array StringDataset[]?Кількість даних з 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.

 Українська