Le moderne applicazioni sanitarie si basano sempre di più su interfacce basate sul web per visualizzare e gestire i dati di immagine medica. Convertire i file DICOM a JSON consente l’integrazione senza sguardo con i framework JavaScript, le API REST e le piattaforme cloud. Questo manuale ti mostra come convertire DIKOM in C# utilizzando Aspose.Medical per .NET.
Perché trasformare DICOM in JSON?
DICOM (Digital Imaging and Communications in Medicine) è il formato standard per l’immagine medica, ma la sua struttura binaria lo rende difficile lavorare con le applicazioni web.
- Compatibilità JavaScript: JSON è nativo ai browser web e ai framework frontend come React, Vue e Angular
- REST API integration: JSON è lo standard di fatto per le moderne API web
- ** Storage database**: NoSQL database come MongoDB memorizza i documenti JSON in modo nativo
- Leggiabilità umana: JSON è facile da verificare e debugare rispetto al binario DICOM
La norma DICOM PS3.18 definisce una rappresentazione JSON per i dati DIKOM, garantendo l’interoperabilità tra i sistemi sanitari.
Inserisci il tuo progetto .NET
In primo luogo, installare Aspose.Medical per .NET e configurare la licenza misurata:
using Aspose.Medical;
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
// Activate metered license
Metered metered = new Metered();
metered.SetMeteredKey("your-public-key", "your-private-key");
Conversione DICOM a JSON
Il modo più semplice per convertire un file DICOM a JSON:
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
public class DicomJsonConverter
{
public string ConvertToJson(string dicomFilePath)
{
// Load the DICOM file
DicomFile dicomFile = DicomFile.Open(dicomFilePath);
// Serialize dataset to JSON string
string json = DicomJsonSerializer.Serialize(dicomFile.Dataset);
return json;
}
}
Pretty-Print JSON per il debugging
Durante lo sviluppo, il formato JSON è più facile da leggere e scaricare:
public string ConvertToFormattedJson(string dicomFilePath)
{
DicomFile dicomFile = DicomFile.Open(dicomFilePath);
// Configure serialization options
var options = new DicomJsonSerializerOptions
{
WriteIndented = true // Enable pretty-print
};
string json = DicomJsonSerializer.Serialize(dicomFile.Dataset, options);
return json;
}
Utilizzare le parole chiave Tag invece di Hex Codes
Per impostazione predefinita, DICOM JSON utilizza i codici tag hexadecimal. Per una produzione più leggibile, utilizzare i nomi delle parole chiave:
public string ConvertWithKeywords(string dicomFilePath)
{
DicomFile dicomFile = DicomFile.Open(dicomFilePath);
var options = new DicomJsonSerializerOptions
{
WriteIndented = true,
UseKeywordsAsJsonKeys = true, // Use "PatientName" instead of "00100010"
WriteKeyword = true, // Include keyword in output
WriteName = true // Include human-readable name
};
string json = DicomJsonSerializer.Serialize(dicomFile.Dataset, options);
return json;
}
Costruire un REST API Endpoint
Ecco come creare un endpoint ASP.NET Core che converte i file DICOM caricati in JSON:
using Microsoft.AspNetCore.Mvc;
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
[ApiController]
[Route("api/[controller]")]
public class DicomController : ControllerBase
{
[HttpPost("to-json")]
public async Task<IActionResult> ConvertToJson(IFormFile file)
{
if (file == null || file.Length == 0)
{
return BadRequest("No DICOM file provided");
}
try
{
// Save uploaded file temporarily
var tempPath = Path.GetTempFileName();
using (var stream = new FileStream(tempPath, FileMode.Create))
{
await file.CopyToAsync(stream);
}
// Convert to JSON
DicomFile dicomFile = DicomFile.Open(tempPath);
var options = new DicomJsonSerializerOptions
{
WriteIndented = true,
UseKeywordsAsJsonKeys = true
};
string json = DicomJsonSerializer.Serialize(dicomFile.Dataset, options);
// Clean up temp file
System.IO.File.Delete(tempPath);
return Content(json, "application/json");
}
catch (Exception ex)
{
return StatusCode(500, $"Conversion failed: {ex.Message}");
}
}
[HttpGet("metadata/{fileName}")]
public IActionResult GetMetadata(string fileName)
{
var filePath = Path.Combine("DicomFiles", fileName);
if (!System.IO.File.Exists(filePath))
{
return NotFound("DICOM file not found");
}
DicomFile dicomFile = DicomFile.Open(filePath);
// Extract specific metadata fields
var metadata = new
{
PatientName = dicomFile.Dataset.GetString(DicomTag.PatientName),
PatientID = dicomFile.Dataset.GetString(DicomTag.PatientID),
StudyDate = dicomFile.Dataset.GetString(DicomTag.StudyDate),
Modality = dicomFile.Dataset.GetString(DicomTag.Modality),
StudyDescription = dicomFile.Dataset.GetString(DicomTag.StudyDescription)
};
return Ok(metadata);
}
}
Serializzazione basata sul streaming per file di grandi dimensioni
Per i file DICOM di grandi dimensioni, utilizzare la serializzazione basata sul flusso per ridurre l’uso della memoria:
public async Task ConvertToJsonStreamAsync(string dicomFilePath, string outputPath)
{
DicomFile dicomFile = DicomFile.Open(dicomFilePath);
var options = new DicomJsonSerializerOptions
{
WriteIndented = true
};
using (var fileStream = new FileStream(outputPath, FileMode.Create))
{
await DicomJsonSerializer.SerializeAsync(
fileStream,
dicomFile.Dataset,
options);
}
}
Conversione di batch per file multipli
Processare tutti i directories dei file DICOM:
public class BatchDicomConverter
{
public async Task ConvertDirectoryAsync(string inputDir, string outputDir)
{
Directory.CreateDirectory(outputDir);
var dicomFiles = Directory.GetFiles(inputDir, "*.dcm");
var options = new DicomJsonSerializerOptions
{
WriteIndented = true,
UseKeywordsAsJsonKeys = true
};
foreach (var filePath in dicomFiles)
{
try
{
DicomFile dicomFile = DicomFile.Open(filePath);
string fileName = Path.GetFileNameWithoutExtension(filePath);
string outputPath = Path.Combine(outputDir, $"{fileName}.json");
using (var stream = new FileStream(outputPath, FileMode.Create))
{
await DicomJsonSerializer.SerializeAsync(
stream,
dicomFile.Dataset,
options);
}
Console.WriteLine($"Converted: {fileName}");
}
catch (Exception ex)
{
Console.WriteLine($"Failed to convert {filePath}: {ex.Message}");
}
}
}
}
Integrazione con React Frontend
Una volta che la tua API ritorna JSON, consumarla in React è semplice:
// React component to display DICOM metadata
import React, { useState } from 'react';
function DicomViewer() {
const [metadata, setMetadata] = useState(null);
const handleFileUpload = async (event) => {
const file = event.target.files[0];
const formData = new FormData();
formData.append('file', file);
const response = await fetch('/api/dicom/to-json', {
method: 'POST',
body: formData
});
const json = await response.json();
setMetadata(json);
};
return (
<div>
<input type="file" onChange={handleFileUpload} accept=".dcm" />
{metadata && (
<pre>{JSON.stringify(metadata, null, 2)}</pre>
)}
</div>
);
}
Migliori pratiche
Quando si converte DICOM in JSON per le applicazioni web, tenere presente questi suggerimenti:
- Anonimato prima della conversione: rimuovere sempre le informazioni identificabili del paziente prima di esponere i dati DICOM attraverso le API web
- Uso di metodi async: per le applicazioni web, utilizzare la serializzazione asinkronica per evitare il blocco delle strisce
- Cache dati convertiti: se gli stessi file DICOM sono richiesti frequentemente, cache la produzione JSON
- Validare i file di input: verificare che i files caricati sono validi DICOM prima del trattamento
- Tradurre i dati binari con attenzione: i grandi dati di pixel dovrebbero essere trattati separatamente o esclusi dalle risposte JSON
conclusione
Convertire i file DICOM a JSON apre i dati di immagine medica per lo sviluppo web moderno. Con Aspose.Medical per .NET, è possibile facilmente serializzare i set dati Dicom a PS3.18-compliant JSon, costruire APIs REST, e integrare con i framework JavaScript. Gli esempi in questo manuale forniscono una base per la costruzione di visualizzatori DIKOM basati sul web, portali dei pazienti e piattaforme di dati sanitari.
Per ulteriori informazioni sulle opzioni di serializzazione di DICOM JSON, visita il Aspose.documentazione medica.
More in this category
- Costruire un microservizio di anonimizzazione DICOM in ASP.NET Core
- Perché l'anonimato DICOM è importante per HIPAA e GDPR nei flussi di lavoro .NET
- Preparazione dei set di dati DICOM per AI e Machine Learning con Aspose.Medical
- Profili di riservatezza personalizzati che personalizzano l'anonimato DICOM alle tue politiche ospedaliere
- Conservare i metadati di DICOM in database SQL e NoSQL con C#