วิธีการ Deserialize DICOM JSON Back to Dataset หรือ DicomFile

วิธีการ Deserialize DICOM JSON Back to Dataset หรือ DicomFile

การสอนนี้แสดงให้เห็นถึงวิธีที่จะทําให้ DICOM JSON กลับ Dataset หรือ DicomFile วัตถุโดยใช้ C# ความสามารถนี้เป็นสิ่งสําคัญเมื่อคุณจําเป็นต้องสร้างข้อมูล DicOM จาก Json ที่เก็บไว้ในฐานข้อมูลหรือได้รับจากเว็บ APIs

ข้อดีของ JSON Deserialization

  • การรีไซเคิลข้อมูล:- สร้างไฟล์ DICOM จาก JSON ที่เก็บไว้ในฐานข้อมูล

  • **การรวม API *:- การประมวลผล DICOM ข้อมูลที่ได้รับเป็น JSON จากบริการเว็บ

  • การประมวลผล Round-Trip:- Serialize ไปยัง JSON, modify แล้ว deserialize กลับไปที่ DICOM.

ข้อกําหนด: การเตรียมสิ่งแวดล้อม

  • ติดตั้ง Visual Studio หรือ IDE .NET ที่เข้ากันได้ใด ๆ.
  • สร้างโครงการการใช้งาน .NET 8 ใหม่
  • ติดตั้ง Aspose.Medical จาก NuGet Package Manager

การเข้าใจตัวเลือก Deserialization

DicomJsonSerializer มีวิธีการการฆ่าเชื้อที่แตกต่างกัน:

วิธีการInputการส่งออกใช้กรณี
DeserializeJSON สตรีมDataset?ชุดข้อมูลเดี่ยวจาก JSON
DeserializeFileJSON สตรีมDicomFile?ไฟล์ DICOM ที่สมบูรณ์ด้วย meta info
DeserializeListJSON แร่ stringDataset[]?ชุดข้อมูลหลายแบบจาก JSON array

คู่มือขั้นตอนสําหรับ Deserialize DICOM JSON

ขั้นตอน 1: ติดตั้ง Aspose.Medical

เพิ่มห้องสมุด Aspose.Medical ไปยังโครงการของคุณโดยใช้ NuGet

Install-Package Aspose.Medical

ขั้นตอนที่ 2: รวมพื้นที่ชื่อที่จําเป็น

เพิ่มอ้างอิงไปยังพื้นที่ชื่อที่ต้องการในรหัสของคุณ.

using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;

ขั้นตอนที่ 3: อ่านเนื้อหา JSON

อ่านเนื้อหา JSON จากไฟล์หรือตัวเลือก

string jsonText = File.ReadAllText("patient_scan.json");

ขั้นตอนที่ 4: Deserialize ไปยัง Dataset

ใช Deserialize เพื่อสร้างวัตถุ Dataset

Dataset? dataset = DicomJsonSerializer.Deserialize(jsonText);

ขั้นตอน 5: การทํางานกับ Dataset

การเข้าถึงและจัดการชุดข้อมูลที่สร้างขึ้นใหม่

if (dataset != null)
{
    Console.WriteLine("Dataset successfully reconstructed from JSON.");
    // Work with the dataset...
}

ขั้นตอน 6: Save Back to DICOM (ตัวเลือก)

สร้าง DicomFile ใหม่และบันทึกไปยังดิสก์

if (dataset != null)
{
    DicomFile newDcm = new DicomFile(dataset);
    newDcm.Save("reconstructed.dcm");
}

ตัวอย่างรหัสสมบูรณ์: Deserialize ชุดข้อมูลเดียว

นี่คือตัวอย่างที่สมบูรณ์แบบที่แสดงให้เห็นว่าวิธีการสั่นสะเทือนชุดข้อมูลเดียว:

using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;

// Read JSON from file
string jsonText = File.ReadAllText("patient_scan.json");

// Deserialize to Dataset
Dataset? dataset = DicomJsonSerializer.Deserialize(jsonText);

if (dataset != null)
{
    Console.WriteLine("Dataset successfully deserialized!");
    
    // Create a new DicomFile with the dataset
    DicomFile newDcm = new DicomFile(dataset);
    
    // Save to DICOM format
    newDcm.Save("reconstructed_scan.dcm");
    Console.WriteLine("Saved to reconstructed_scan.dcm");
}
else
{
    Console.WriteLine("Failed to deserialize JSON.");
}

Deserialize เต็ม DicomFile

เมื่อ JSON ของคุณรวมข้อมูล meta ไฟล์, ใช้ DeserializeFile:

using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;

// Read JSON that includes file meta information
string jsonFileText = File.ReadAllText("complete_dicom.json");

// Deserialize to complete DicomFile
DicomFile? dicomFile = DicomJsonSerializer.DeserializeFile(jsonFileText);

if (dicomFile != null)
{
    Console.WriteLine("DicomFile successfully deserialized!");
    dicomFile.Save("reconstructed_complete.dcm");
}

Deserialize JSON Array ไปยัง ชุดข้อมูลหลาย

เมื่อทํางานกับ JSON มีส่วนประกอบหลายชุดข้อมูล:

using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;

// Read JSON array
string jsonArrayText = File.ReadAllText("multiple_studies.json");

// Deserialize to Dataset array
Dataset[]? datasets = DicomJsonSerializer.DeserializeList(jsonArrayText);

if (datasets != null)
{
    Console.WriteLine($"Deserialized {datasets.Length} datasets.");
    
    // Save each dataset as a separate DICOM file
    for (int i = 0; i < datasets.Length; i++)
    {
        DicomFile dcm = new DicomFile(datasets[i]);
        dcm.Save($"study_{i:D3}.dcm");
    }
    
    Console.WriteLine("All datasets saved successfully!");
}

ตัวอย่างการเดินทางรอบ: Serialize, Modify, Deserialize

กรณีที่ใช้ทั่วไปคือการแก้ไขข้อมูล DICOM โดย JSON:

using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
using System.Text.Json;

// Load original DICOM file
DicomFile original = DicomFile.Open("original.dcm");

// Serialize to JSON
string json = DicomJsonSerializer.Serialize(original, writeIndented: true);

// Parse JSON for modification (using System.Text.Json)
using JsonDocument doc = JsonDocument.Parse(json);
// ... modify JSON as needed ...

// Deserialize back to Dataset
Dataset? modifiedDataset = DicomJsonSerializer.Deserialize(json);

if (modifiedDataset != null)
{
    DicomFile modifiedDcm = new DicomFile(modifiedDataset);
    modifiedDcm.Save("modified.dcm");
}

การทํางานกับ Database Storage

Deserialize DICOM JSON ได้รับจากฐานข้อมูล:

using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;

// Simulating retrieval from database
string jsonFromDatabase = GetDicomJsonFromDatabase("patient_123");

Dataset? dataset = DicomJsonSerializer.Deserialize(jsonFromDatabase);

if (dataset != null)
{
    // Process the reconstructed dataset
    DicomFile dcm = new DicomFile(dataset);
    dcm.Save("from_database.dcm");
    Console.WriteLine("DICOM file reconstructed from database JSON.");
}

// Simulated database retrieval method
string GetDicomJsonFromDatabase(string patientId)
{
    // In real implementation, this would query your database
    return File.ReadAllText($"database_cache/{patientId}.json");
}

Async Deserialization สําหรับแอปพลิเคชันเว็บ

สําหรับแอพ ASP.NET Core ใช้วิธีการ async:

using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;

// Async deserialization from stream
public async Task<Dataset?> DeserializeFromStreamAsync(Stream jsonStream)
{
    Dataset? dataset = await DicomJsonSerializer.DeserializeAsync(jsonStream);
    return dataset;
}

// Usage in ASP.NET Core controller
[HttpPost("import")]
public async Task<IActionResult> ImportDicomJson()
{
    Dataset? dataset = await DicomJsonSerializer.DeserializeAsync(Request.Body);
    
    if (dataset != null)
    {
        // Process the dataset
        return Ok("DICOM data imported successfully");
    }
    
    return BadRequest("Invalid DICOM JSON");
}

Troubleshooting

การจัดการกับ JSON ที่ผิดปกติ

เสมอซึม deserialization ใน try-catch blocks:

try
{
    Dataset? dataset = DicomJsonSerializer.Deserialize(jsonText);
    if (dataset == null)
    {
        Console.WriteLine("Deserialization returned null - check JSON format.");
    }
}
catch (JsonException ex)
{
    Console.WriteLine($"JSON parsing error: {ex.Message}");
}
catch (Exception ex)
{
    Console.WriteLine($"Deserialization error: {ex.Message}");
}

การจัดการ Truncated JSON

สําหรับไฟล์ JSON ขนาดใหญ่ให้แน่ใจว่าเนื้อหาที่สมบูรณ์จะอ่าน:

// Use ReadAllText for complete file content
string completeJson = File.ReadAllText("large_dicom.json");

// Verify JSON is complete (basic check)
if (!completeJson.TrimEnd().EndsWith("}") && !completeJson.TrimEnd().EndsWith("]"))
{
    Console.WriteLine("Warning: JSON may be truncated.");
}

ความเข้ากันได้รุ่น

ตรวจสอบให้แน่ใจว่า JSON ได้รับการสร้างด้วยเวอร์ชันที่เข้ากันได้ของซีรีเลเซอร์ เวอร์ชันที่ไม่สมบูรณ์อาจทําให้เกิดความล้มเหลวในการสั่นสะเทือน

ข้อมูลเพิ่มเติม

  • ชุดข้อมูลที่ไม่พึงประสงค์ไม่รวมข้อมูลพิกเซลหากไม่ได้รวมไว้ใน JSON หลัก
  • สําหรับการใช้งานการผลิตนําไปใช้การยืนยันที่เหมาะสมของ input JSON ก่อนการกําจัด
  • โปรดพิจารณาการ caching ชุดข้อมูลที่ไม่ซ้ํากันสําหรับข้อมูลที่เข้าถึงได้บ่อย

ข้อสรุป

การสอนนี้ได้แสดงให้เห็นถึงวิธีที่จะทําให้ DICOM JSON กลับไปที่ Dataset หรือ DicomFile วัตถุใน C# โดยใช้ Aspose.Medical ความสามารถนี้ช่วยให้การประมวลผลข้อมูลแบบวงกลมและการบูรณาการแบบไร้สายกับระบบจัดเก็บข้อมูลและ API ที่อยู่บน Json

 แบบไทย