Cum să dezerializezi DICOM JSON înapoi la Dataset sau DicomFile

Cum să dezerializezi DICOM JSON înapoi la Dataset sau DicomFile

Acest tutorial demonstrează modul de deserializare a DICOM JSON înapoi la Dataset sau DicomFile obiecte folosind C#. Această capacitate este esențială atunci când trebuie să reconstruiți datele DicOM de la jSON stocate în baze de date sau primite din API-uri web.

Beneficiile deserializării JSON

  • • Recuperarea datelor *:- Recuperarea fișierelor DICOM din JSON stocate în baze de date.

  • • Integrarea API:- Procesarea datelor DICOM primite ca JSON din serviciile web.

    • Procedura de prelucrare a traseului**:- Serializați-vă la JSON, modificați, apoi deserificați înapoi la DICOM.

Etichetă: pregătirea mediului

  • Instalați Visual Studio sau orice IDE compatibil .NET.
  • Creați un nou proiect de aplicații .NET 8 console.
  • Instalați Aspose.Medical de la NuGet Package Manager.

Înțelegerea opțiunilor de deserializare

DicomJsonSerializer oferă diferite metode de deserizare:

MethodInputieşireUtilizarea cazului
DeserializeRăzboiul JSONDataset?Set de date unic de la JSON
DeserializeFileRăzboiul JSONDicomFile?Completarea fișierului DICOM cu meta info
DeserializeListCuvânt cheie JSON array stringDataset[]?Multe seturi de date din JSON array

Ghidul pas cu pas pentru dezerializarea DICOM JSON

Pasul 1: Instalați Aspose.Medical

Adăugați biblioteca Aspose.Medical la proiectul dvs. folosind NuGet.

Install-Package Aspose.Medical

Pasul 2: Includeți spațiile de nume necesare

Adăugați referințe la spațiile de nume necesare în codul dvs.

using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;

Pasul 3: Citiți conținutul JSON

Citiți conținutul JSON dintr-un fișier sau o variabilă.

string jsonText = File.ReadAllText("patient_scan.json");

Pasul 4: Deserializarea la Dataset

Utilizarea Deserialize pentru a reconstrui un obiect Dataset.

Dataset? dataset = DicomJsonSerializer.Deserialize(jsonText);

Pasul 5: Lucrați cu setul de date

Accesul și manipularea setului de date reconstruit.

if (dataset != null)
{
    Console.WriteLine("Dataset successfully reconstructed from JSON.");
    // Work with the dataset...
}

Pasul 6: Salvați înapoi la DICOM (opțional)

Creați un nou DicomFile și salvați-l pe disc.

if (dataset != null)
{
    DicomFile newDcm = new DicomFile(dataset);
    newDcm.Save("reconstructed.dcm");
}

Exemplu complet de cod: Deserializarea unui singur set de date

Iată un exemplu complet care demonstrează modul de deserializare a unui singur set de date:

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.");
}

Deserializare completă DicomFile

În cazul în care JSON include date meta informații, utilizați 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");
}

Deserializarea JSON Array către mai multe seturi de date

Atunci când lucrați cu JSON arate care conțin mai multe seturi de date:

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!");
}

Cuvânt cheie: serializare, modificare și deserializarea

Un caz de utilizare comună este modificarea datelor DICOM prin 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");
}

Lucrarea cu stocarea bazei de date

Deserialize DICOM JSON obținut dintr-o bază de date:

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 Deserializare pentru aplicații web

Pentru aplicațiile ASP.NET Core, utilizați metodele async:

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

Comportamentul cu JSON defectuos

Întotdeauna înfășurați deserializarea în blocuri de încercare:

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}");
}

Răspundeți Truncated JSON

Pentru fișierele JSON mari, asigurați-vă că conținutul complet este citit:

// 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.");
}

Versiune compatibilă

Asigurați-vă că JSON a fost generat cu o versiune compatibilă a serializatorului. versiunile necorespunzătoare pot provoca eșecuri de deserializare.

Informații suplimentare

  • Seturile de date deserializate nu includ datele pe pixel, cu excepția cazului în care acestea au fost încorporate în JSON original.
  • Pentru utilizarea de producție, implementați validarea corespunzătoare a intrărilor JSON înainte de deserializare.
  • Gândiți-vă la caching seturile de date deserializate pentru datele accesate frecvent.

concluziile

Acest tutorial a arătat cum să deserializeze DICOM JSON înapoi la Dataset sau DicomFile obiectele în C# folosind Aspose.Medical. Această capacitate permite prelucrarea de date cu rotundă și integrarea fără fir cu sistemele de stocare și API bazate pe jSON.

 Română