Aplicações de saúde modernas dependem cada vez mais de interfaces baseadas na web para visualizar e gerenciar dados de imagem médica. Conversão de arquivos DICOM para JSON permite integração sem fio com quadros de JavaScript, APIs REST e plataformas em nuvem. Este guia mostra como converter Dicom para jSON em C# usando Aspose.Medical para .NET.
Por que converter DICOM para JSON?
DICOM (Digital Imaging and Communications in Medicine) é o formato padrão para a imagem médica, mas sua estrutura binária torna desafiador trabalhar com em aplicações da web.
- Compatibilidade com JavaScript: JSON é nativo para navegadores web e quadros front-end como React, Vue e Angular
- REST API integração: JSON é o padrão de facto para APIs web modernos
- Armazenamento de banco de dados: NoSQL bases de informações como MongoDB armazenam documentos JSON nativamente
- Lidabilidade humana: JSON é fácil de inspecionar e desbloquear em comparação com DICOM binário
O padrão DICOM PS3.18 define uma representação JSON para os dados DIKOM, garantindo a interoperabilidade em todos os sistemas de saúde.
Crie seu projeto .NET
Primeiro, instale Aspose.Medical para .NET e configure a licença medida:
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");
Conversão DICOM para JSON
A maneira mais simples de converter um arquivo DICOM para 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 para Debugging
Durante o desenvolvimento, o formatado JSON é mais fácil de ler e desbloquear:
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;
}
Usar palavras-chave em vez de código Hex
Por padrão, a DICOM JSON usa códigos de tag hexadecimal. Para mais leitura, use nomes de palavras-chave:
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;
}
Construção de um REST API Endpoint
Aqui está como criar um endpoint ASP.NET Core que converte arquivos DICOM carregados para 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);
}
}
Serialização baseada em streaming para arquivos grandes
Para grandes arquivos DICOM, use serializadores baseados no fluxo para reduzir o uso da memória:
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);
}
}
Conversão de batch para múltiplos arquivos
Processar todas as diretrizes dos arquivos 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}");
}
}
}
}
Integração com o React Frontend
Uma vez que a sua API retorna JSON, consumindo-a em React é simples:
// 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>
);
}
Melhores Práticas
Ao converter DICOM para JSON para aplicações web, tenha em mente estas dicas:
- Anonimização antes da conversão: Remova sempre informações identificáveis do paciente antes de expor dados DICOM através de APIs web
- Utilização de métodos de sincronização: Para aplicações da web, use serializar asíncrono para evitar o bloqueio de filas
- Cache dados convertidos: Se os mesmos arquivos DICOM forem solicitados com frequência, cache a saída JSON
- Validar ficheiros de entrada: Verifique se os arquivos carregados são válidos DICOM antes do processamento
- Tratar dados binários com cuidado: Dados de pixel grandes devem ser tratados separadamente ou excluídos das respostas JSON
Conclusão
Conversão de arquivos DICOM para JSON abre dados de imagem médica para o desenvolvimento da web moderna. Com Aspose.Medical para .NET, você pode facilmente serializar os conjuntos de dados Dicom para PS3.18-compliant JSon, construir APIs REST, e integrar com os quadros JavaScript. Os exemplos neste guia fornecem uma base para a construção de web-based viewers DIKOM, portais de pacientes e plataformas de informações de saúde.
Para obter mais informações sobre as opções de serialização DICOM JSON, visite o Aspose.Documentação médica.
More in this category
- Construir um Microservice de Anonimização DICOM no ASP.NET Core
- Por que a anonimização DICOM é importante para HIPAA e GDPR em fluxos de trabalho .NET
- Preparando DICOM Datasets para AI e Machine Learning com Aspose.Medical
- Profiles de confidencialidade personalizados que ajustam a anonimização da DICOM às suas políticas hospitalares
- Armazenar metadados DICOM em bases de dados SQL e NoSQL com C#