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.

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