יישומי הבריאות המודרניים תלויים יותר ויותר באפליקציות מבוססות אינטרנט כדי לצפות ולנהל נתוני תמונה רפואית.ההפוך של קבצי DICOM ל- JSON מאפשר אינטגרציה בלתי נסבלת עם מסגרות JavaScript, APIs REST, ופלטפורמות ענן.מדריך זה מראה לך כיצד להפוך את DIKOM לי-JSON ב- C# באמצעות Aspose.Medical עבור .NET.
למה להפוך את DICOM ל- JSON?
DICOM (Digital Imaging and Communications in Medicine) הוא פורמט סטנדרטי עבור תמונה רפואית, אבל המבנה הבינארי שלה עושה את זה מאתגר לעבוד עם ביישומים באינטרנט.
- תאימות JavaScript: JSON הוא מקורי עבור דפדפנים אינטרנט ומערכות frontend כגון React, Vue ו- Angular
- אינטגרציה של REST API: JSON הוא הסטנדרט המדויק עבור APIs האינטרנט המודרניים
- אחסון מסד הנתונים: מסדי נתונים NoSQL כגון MongoDB מאחסנים מסמכים JSON באופן מקומי
- קריאה אנושית: JSON קל לבדוק ולשבור בהשוואה ל- DICOM בינארי
הסטנדרט של DICOM PS3.18 מגדיר ייצוג JSON עבור נתונים דיקום, אשר מבטיח שיתוף פעולה בין מערכות הבריאות.
הגדרת הפרויקט שלך .NET
ראשית, להתקין Aspose.Medical עבור .NET ולהגדיר רישיון מבוסס:
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");
דיקום בסיסי ל- JSON Conversion
הדרך הפשוטה ביותר להמיר קובץ DICOM ל- 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 for Debugging
במהלך הפיתוח, JSON פורמט הוא קל יותר לקרוא ולשבור:
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
כברירת מחדל, DICOM JSON משתמשת בקוד תווית hexadecimal. עבור תוצאות קריאות יותר, השתמש בשמות מילות מפתח:
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
הנה איך ליצור נקודת סיום ASP.NET Core המהפכה של קבצי DICOM שהועלו ל- 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);
}
}
סריליזציה מבוססת זרם עבור קבצים גדולים
עבור קבצי DICOM גדולים, השתמש בסריליזציה מבוססת זרם כדי להפחית את השימוש בזיכרון:
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 עבור קבצים מרובים
מעבדים את כל התיקיות של קבצי 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}");
}
}
}
}
אינטגרציה עם React Frontend
ברגע שה-API שלך חוזר ל-JSON, לצרוך אותו ב-React הוא פשוט:
// 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>
);
}
שיטות טובות
בעת ההמרה של DICOM ל- JSON עבור יישומי אינטרנט, שמור על עצות אלה:
- אנונימיזציה לפני ההמרה: תמיד להסיר מידע זיהוי מטופל לפני החשיפה של נתוני DICOM באמצעות APIs האינטרנט
- שיטות אסינק משתמשות: עבור יישומי אינטרנט, השתמש בסריליזציה לא סינכרון כדי למנוע חסימת רצועות
- Cache נתונים המוחלפים: אם אותו קובץ DICOM נדרש לעתים קרובות, Cache את היציאה JSON
- אמת את קבצי הכניסה: בדוק כי הקבצים שהועלו הם בתוקף DICOM לפני עיבוד
- התמודדות עם נתונים בינאריים בזהירות: נתוני פיקסלים גדולים צריכים להתמודד בנפרד או להימנע מתגובות JSON
מסקנה
המרה של קבצי DICOM ל- JSON פותחת נתוני תמונה רפואית לפיתוח האינטרנט המודרני.עם Aspose.Medical עבור .NET, באפשרותך בקלות לסריאליזציה של קבוצות נתונים של DIKOM ב- PS3.18-תאימות לJSON, לבנות APIs REST, ואינטגרציה עם מסגרות JavaScript.
לקבלת מידע נוסף על אפשרויות הסריליזציה של DICOM JSON, בקר ב תגית: מסמכים רפואיים.