Bagaimana untuk menyesuaikan output DICOM JSON dengan DicomJsonSerializerOptions

Bagaimana untuk menyesuaikan output DICOM JSON dengan DicomJsonSerializerOptions

Tutorial ini menunjukkan bagaimana untuk menyesuaikan output serialisasi DICOM JSON menggunakan DicomJsonSerializerOptions dalam C#. Customization membolehkan anda untuk mengawal format kunci jSON, termasuk metadata tambahan, dan mengendalikan nilai nombor mengikut keperluan integrasi anda.

Mengapa anda perlu menyesuaikan output JSON?

Sistem yang berbeza mungkin memerlukan format JSON yang berlainan. penyesuaian membolehkan:

  • Menggunakan kata kunci yang boleh dibaca oleh manusia daripada nombor tag
  • Termasuk nama tag untuk dokumentasi
  • Mengkaji bagaimana nilai nombor diwakili
  • Menyelesaikan keperluan sistem pihak ketiga tertentu

Tag: persiapan persekitaran

  • Menyediakan Visual Studio atau mana-mana .NET IDE yang kompatibel.
  • Mencipta projek aplikasi .NET 8 baru.
  • Instal Aspose.Medical daripada NuGet Package Manager.

Pilihan serialisasi yang tersedia

OptionDescriptionImpact
UseKeywordsAsJsonKeysGunakan kata kunci DICOM daripada nombor tag sebagai kunci JSON"PatientName" kepada vs "00100010"
WriteKeywordMenyertakan medan kata kunci dalam setiap objek tagAdds "keyword": "PatientName"
WriteNameMasukkan medan nama dalam setiap objek tagAdds "name": "Patient's Name"
NumberHandlingPerwakilan nilai nombor kawalanNombor sebagai string atau nombor JSON sebenar

Langkah-langkah panduan untuk menyesuaikan output JSON

Langkah 1: Instal Aspose.Medical

Tambah perpustakaan Aspose.Medical kepada projek anda menggunakan NuGet.

Install-Package Aspose.Medical

Langkah 2: Masukkan ruang nama yang diperlukan

Tambah rujukan kepada ruang nama yang diperlukan dalam kod anda.

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

Langkah 3: Mencipta opsyen instans

Mencipta A DicomJsonSerializerOptions contoh untuk mengkonfigurasi tetapan.

DicomJsonSerializerOptions options = new DicomJsonSerializerOptions();

Langkah 4: Menyediakan pilihan

Tetapkan pilihan yang dikehendaki untuk output JSON anda.

options.UseKeywordsAsJsonKeys = true;
options.WriteKeyword = true;
options.WriteName = true;
options.NumberHandling = JsonNumberHandling.WriteAsString;

Langkah 5: Serialisasi dengan opsyen

Pindahkan pilihan kepada kaedah Serialize.

DicomFile dcm = DicomFile.Open("patient_scan.dcm");
string json = DicomJsonSerializer.Serialize(dcm, options, writeIndented: true);

Langkah 6: Simpan output yang disesuaikan

Simpan atau gunakan JSON tersuai.

File.WriteAllText("customized_output.json", json);
Console.WriteLine("Customized JSON output saved!");

Contoh Kod Lengkap dengan Semua Pilihan

Berikut ialah contoh lengkap yang menunjukkan semua pilihan penyesuaian:

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

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

// Configure serialization options
DicomJsonSerializerOptions options = new DicomJsonSerializerOptions
{
    UseKeywordsAsJsonKeys = true,
    WriteKeyword = true,
    WriteName = true,
    NumberHandling = JsonNumberHandling.WriteAsString
};

// Serialize with custom options
string json = DicomJsonSerializer.Serialize(dcm, options, writeIndented: true);

// Save output
File.WriteAllText("fully_customized.json", json);

Console.WriteLine("DICOM serialized with all custom options!");
Console.WriteLine(json);

Membandingkan format output

Pengeluaran lalai (Standard PS3.18 Format)

{
  "00100010": {
    "vr": "PN",
    "Value": [{ "Alphabetic": "DOE^JOHN" }]
  },
  "00100020": {
    "vr": "LO",
    "Value": ["12345"]
  }
}

Dengan UseKeywordsAsJsonKeys = benar

{
  "PatientName": {
    "vr": "PN",
    "Value": [{ "Alphabetic": "DOE^JOHN" }]
  },
  "PatientID": {
    "vr": "LO",
    "Value": ["12345"]
  }
}

dengan WriteKeyword dan WritName = benar

{
  "00100010": {
    "vr": "PN",
    "keyword": "PatientName",
    "name": "Patient's Name",
    "Value": [{ "Alphabetic": "DOE^JOHN" }]
  }
}

Dengan nomborHandling = WriteAsString

{
  "00280010": {
    "vr": "US",
    "Value": ["512"]
  }
}

Dengan NumberHandling = AllowReadingFromString♰ WriteAsNumber

{
  "00280010": {
    "vr": "US",
    "Value": [512]
  }
}

Menggunakan contoh kes

Dokumen yang boleh dibaca oleh manusia

DicomJsonSerializerOptions docOptions = new DicomJsonSerializerOptions
{
    UseKeywordsAsJsonKeys = true,
    WriteKeyword = true,
    WriteName = true
};

string documentationJson = DicomJsonSerializer.Serialize(dcm, docOptions, writeIndented: true);

Untuk PS3.18 Perkhidmatan Web Komprehensif

// Use default options for DICOM PS3.18 compliance
DicomJsonSerializerOptions webOptions = new DicomJsonSerializerOptions
{
    UseKeywordsAsJsonKeys = false,  // Use tag numbers
    WriteKeyword = false,
    WriteName = false,
    NumberHandling = JsonNumberHandling.WriteAsString
};

string ps318Json = DicomJsonSerializer.Serialize(dcm, webOptions);

Untuk JavaScript Frontend Integrasi

DicomJsonSerializerOptions jsOptions = new DicomJsonSerializerOptions
{
    UseKeywordsAsJsonKeys = true,  // Easier to work with in JS
    NumberHandling = JsonNumberHandling.AllowReadingFromString  // Native numbers
};

string jsCompatibleJson = DicomJsonSerializer.Serialize(dcm, jsOptions);

Penyimpanan pangkalan data

DicomJsonSerializerOptions dbOptions = new DicomJsonSerializerOptions
{
    UseKeywordsAsJsonKeys = true,  // Better for querying
    WriteKeyword = false,          // Reduce storage size
    WriteName = false
};

string compactJson = DicomJsonSerializer.Serialize(dcm, dbOptions);

Pertimbangan penting

Peringatan Interoperabiliti

Pilihan bukan standard boleh merosakkan keserasian dengan sesetengah parsers DICOM:

// WARNING: This format may not be compatible with all DICOM JSON parsers
DicomJsonSerializerOptions nonStandardOptions = new DicomJsonSerializerOptions
{
    UseKeywordsAsJsonKeys = true  // Not PS3.18 compliant
};

// For maximum compatibility, use defaults:
DicomJsonSerializerOptions standardOptions = new DicomJsonSerializerOptions();

Rekomendasi untuk pematuhan

Apabila pematuhan DICOM PS3.18 diperlukan, gunakan tetapan lalai:

// PS3.18 compliant serialization
string compliantJson = DicomJsonSerializer.Serialize(dcm);  // No custom options

Serialisasi berasaskan aliran dengan opsyen

Untuk fail besar, gunakan serialisasi berasaskan aliran:

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

DicomFile dcm = DicomFile.Open("large_scan.dcm");

DicomJsonSerializerOptions options = new DicomJsonSerializerOptions
{
    UseKeywordsAsJsonKeys = true,
    WriteKeyword = true
};

using (FileStream fs = File.Create("large_customized.json"))
{
    DicomJsonSerializer.Serialize(fs, dcm.Dataset, options, writeIndented: true);
}

Maklumat tambahan

  • Pilihan disesuaikan mempengaruhi kedua-dua serialisasi dan deserialisasi - memastikan pilihan yang konsisten apabila data putaran bulat.
  • The WriteName opsyen menambah nama tag DICOM yang boleh dibaca oleh manusia yang meningkatkan saiz JSON tetapi meningkatkan kebolehbacaan.
  • Sesetengah sistem pihak ketiga mungkin memerlukan format JSON tertentu - lihat dokumentasi mereka sebelum memilih pilihan.

Conclusion

Tutorial ini telah membuktikan bagaimana untuk menyesuaikan output serialisasi DICOM JSON dalam C# menggunakan Aspose.Medical.Dengan mengkonfigurasi DicomJsonSerializerOptions, anda boleh mengatur format jSON untuk memenuhi keperluan integrasi tertentu sambil menyeimbangkan keperluan pembacaan, saiz, dan interoperabiliti.

 Melayu