Modern sağlık uygulamaları, tıbbi görüntü verilerini görüntülemek ve yönetmek için web tabanlı arayüzlere giderek daha fazla güveniyor. DICOM dosyalarını JSON’a dönüştürmek, JavaScript çerçeveleriyle, REST APIs’lerle ve bulut platformlarıyla anlamsız bir entegrasyon sağlar. Bu kılavuz, Aspose.Medical for .NET’i kullanarak C#‘da DIKOM’u C’ye nasıl dönüştüreceğinizi gösterir.

Neden DICOM’u JSON’a dönüştürüyorsunuz?

DICOM (Dijital Görüntüleme ve İletişim Tıp) tıbbi görüntü için standart biçimdir, ancak ikili yapısı ile web uygulamalarında çalışmak zor hale gelir.

  • JavaScript uyumluluğu: JSON, React, Vue ve Angular gibi web tarayıcılarına ve frontend çerçevelerine aittir.
  • REST API entegrasyonu: JSON modern web APIs için de facto standarttır
  • Database depolama: MongoDB gibi NoSQL veritabanları JSON belgelerini yerli olarak kaydeder
  • İnsan okunabilirliği: JSON, ikili DICOM ile karşılaştırıldığında kolayca kontrol edilebilir ve boşaltılabilir

DICOM PS3.18 standartları, sağlık sistemleri arasındaki işbirliği sağlayan bir JSON temsilciliği tanımlar.

.NET Projesi Yükleme

Öncelikle .NET için Aspose.Medical yükleme ve ölçülen lisanslandırma ayarlayın:

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

Temel DICOM ile JSON dönüştürme

Bir DICOM dosyasını JSON’a dönüştürmenin en kolay yolu:

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

Debugging için Pretty-Print JSON

Geliştirme sırasında, biçimlendirilmiş JSON okumak ve boşaltmak daha kolaydır:

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

Hex kodları yerine anahtar kelimeleri kullanın

Varsayılan olarak, DICOM JSON hexadecimal etiket kodlarını kullanır. daha okunabilir çıkış için, anahtar kelime isimlerini kullanın:

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

REST API Endpoint İnşaat

İşte yüklü DICOM dosyalarını JSON’a dönüştüren bir ASP.NET Core son noktası nasıl oluşturulur:

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

Büyük dosyalar için akış tabanlı serializasyon

Büyük DICOM dosyaları için, hafıza kullanımını azaltmak için akış tabanlı serializasyon kullanın:

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

Çeşitli dosyalar için batch dönüştürme

DICOM dosyalarının tüm dizinlerini işleme:

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

React Frontend ile Entegre

API’niz JSON’a döndüğünde, React’te tüketmek basittir:

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

En İyi Uygulamalar

Web uygulamaları için DICOM’u JSON’a dönüştürürken, bu ipuçlarını unutmayın:

  • Dönüşümden önce anonimleştirin: Her zaman web APIs aracılığıyla DICOM verilerini ortaya çıkarmadan önce hastanın tanımlanabilir bilgileri kaldırın
  • Async yöntemleri kullanın: Web uygulamaları için, çubukları engellemek için asynkron serializasyonun kullanılması
  • Cache dönüştürülmüş verileri: Aynı DICOM dosyaları sık sık talep edilirse, JSON çıkışını gizleyin
  • Giriş dosyalarını doğrulayın: Yüklenen dosyanın işleme başlamadan önce DICOM geçerli olup olmadığını kontrol edin
  • Binary verileri dikkatlice işleyin: Büyük piksel veriler ayrı olarak işlenmelidir veya JSON yanıtlarından çıkarılmalıdır

Sonuç

DICOM dosyalarını JSON’a dönüştürmek, modern web geliştirme için tıbbi görüntüleme verilerini açıyor. .NET için Aspose.Medical ile, kolayca PS3.18’e uyumlu Json’lara DIKOM veri setlerini serialize edebilir, REST APIs’leri oluşturabilir ve JavaScript çerçeveleriyle entegre edebilirsiniz. Bu kılavuzdaki örnekler, web tabanlı DİCOM izleyicileri, hastalar portalları ve sağlık verileri platformları oluşturmak için bir temel sağlar.

DICOM JSON serializasyon seçenekleri hakkında daha fazla bilgi için, Aspose.Tıbbi Belgeler.

More in this category