Aplikasi penjagaan kesihatan moden semakin bergantung kepada antara muka berasaskan web untuk melihat dan menguruskan data imej perubatan.Mengubah fail DICOM kepada JSON membolehkan integrasi tanpa wayar dengan rangka kerja JavaScript, APIs REST, dan platform awan.Panduan ini menunjukkan kepada anda bagaimana untuk menukar Dicom kepada json dalam C# menggunakan Aspose.Medical untuk .NET.
Mengapa menukar DICOM kepada JSON?
DICOM (Digital Imaging and Communications in Medicine) ialah format standard untuk imej perubatan, tetapi struktur binari menjadikan ia mencabar untuk bekerja dengan dalam aplikasi web. JSON menawarkan beberapa kelebihan untuk pembangunan web:
- Kompatibiliti JavaScript: JSON berasal daripada pelayar web dan rangka kerja frontend seperti React, Vue, dan Angular
- Integrasi API REST: JSON adalah standard de facto untuk API web moden
- ** Penyimpanan pangkalan data**: NoSQL database seperti MongoDB menyimpan dokumen JSON secara asli
- Bacaan manusia: JSON mudah untuk memeriksa dan membuang berbanding DICOM binari
Standard DICOM PS3.18 mendefinisikan perwakilan JSON untuk data Dicom, memastikan interoperabiliti di seluruh sistem penjagaan kesihatan.
Menubuhkan projek .NET anda
Pertama, anda perlu memasang Aspose.Medical untuk .NET dan mengkonfigurasi lesen yang diukur:
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");
DICOM kepada JSON Conversion
Cara yang paling mudah untuk menukar fail DICOM kepada 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 untuk Debugging
Semasa pembangunan, format JSON lebih mudah untuk membaca dan membongkar:
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;
}
Menggunakan kata kunci tag daripada kod hex
Secara lalai, DICOM JSON menggunakan kod tag hexadecimal. Untuk output yang lebih boleh dibaca, gunakan nama kata kunci:
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;
}
Membina REST API Endpoint
Berikut adalah cara untuk mencipta titik akhir ASP.NET Core yang menukar fail DICOM yang dimuat naik ke 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);
}
}
Serialisasi berasaskan aliran untuk fail besar
Untuk fail DICOM yang besar, gunakan serialisasi berasaskan aliran untuk mengurangkan penggunaan memori:
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);
}
}
Batch Conversion untuk pelbagai fail
Memproses keseluruhan direktori fail 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}");
}
}
}
}
Mengintegrasikan dengan React Frontend
Sebaik sahaja API anda mengembalikan JSON, menggunakannya dalam React adalah mudah:
// 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>
);
}
amalan terbaik
Apabila menukar DICOM kepada JSON untuk aplikasi web, ingat tips ini:
- Anonim sebelum penukaran: Sentiasa menghapuskan maklumat yang boleh dikenalpasti pesakit sebelum mendedahkan data DICOM melalui API web
- Metode Async digunakan: Untuk aplikasi web, gunakan serialisasi asynchronous untuk mengelakkan memblokir tali
- Cache data yang ditukar: Jika fail DICOM yang sama diminta kerap, cache output JSON
- Mengesahkan fail input: Semak bahawa fail yang dimuat naik adalah sah DICOM sebelum pemprosesan
- Mengendalikan data binari dengan teliti: Data piksel besar perlu diproses secara berasingan atau dikecualikan daripada jawapan JSON
Conclusion
Menukar fail-fail DICOM kepada JSON membuka data imej perubatan untuk pembangunan web moden. Dengan Aspose.Medical untuk .NET, anda boleh dengan mudah menyejukkan set data DIKOM ke PS3.18-sesuai JSon, membina APIs REST, dan mengintegrasikan dengan rangka kerja JavaScript. Contoh dalam panduan ini menyediakan asas untuk pembinaan web-based penonton DIM, portal pesakit dan platform data penjagaan kesihatan.
Untuk maklumat lanjut mengenai pilihan serialisasi DICOM JSON, lawati Aspose.Dokumen Perubatan.
More in this category
- Membina Microservice Anonim DICOM dalam ASP.NET Core
- Mengapa DICOM Anonymization Bermakna untuk HIPAA dan GDPR dalam aliran kerja .NET
- Menyediakan set data DICOM untuk AI dan pembelajaran mesin dengan Aspose.Medical
- Profil privasi tersuai menyesuaikan anonimiti DICOM dengan dasar hospital anda
- Menyimpan Metadata DICOM dalam pangkalan data SQL dan NoSQL dengan C#