Com personalitzar la sortida DICOM JSON amb DicomJsonSerializerOptions

Com personalitzar la sortida DICOM JSON amb DicomJsonSerializerOptions

Aquest tutorial demostra com personalitzar la sortida de serialització de DICOM JSON utilitzant DicomJsonSerializerOptions en C#. La personalització li permet controlar els formats clau de jSON, incloure metadades addicionals i gestionar els valors numèrics segons els vostres requisits d’integració.

Per què personalitzar la sortida JSON?

Diferents sistemes poden requerir diferents formats JSON. La personalització permet:

  • Utilitzar paraules clau lliures en lloc de nombres d’etiquetes
  • Inclou els noms de etiquetes per a la documentació
  • Controlar com es representen els valors numèrics
  • Reunió amb els requisits específics del sistema de tercers

Previsió: Preparar el medi ambient

  • Instal·lació de Visual Studio o qualsevol compatible .NET IDE.
  • Crear un nou projecte d’aplicació .NET 8 consola.
  • Instal·la Aspose.Medical des del NuGet Package Manager.

Opcions de serialització disponibles

OptionDescripcióImpact
UseKeywordsAsJsonKeysUtilitzeu les paraules clau de DICOM en lloc dels nombres d’etiquetes com a claus JSON"PatientName" El vs "00100010"
WriteKeywordIncloure el camp de paraules clau en cada objecte d’etiquetesAdds "keyword": "PatientName"
WriteNameInclou el camp de nom en cada objecte de tagAdds "name": "Patient's Name"
NumberHandlingRepresentació de valor numèricNombres com a cordes o nombres JSON reals

Guia de pas a pas per personalitzar la sortida JSON

Pas 1: Instal·lació Aspose.Medical

Afegeix la biblioteca d’Aspose.Medical al teu projecte utilitzant NuGet.

Install-Package Aspose.Medical

Pas 2: Incloure els espais de nom necessaris

Afegeix referències als espais de nom requerits en el teu codi.

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

Pas 3: Creació d’opcions

Creació a DicomJsonSerializerOptions Instal·lació de configuracions.

DicomJsonSerializerOptions options = new DicomJsonSerializerOptions();

Pas 4: Configuració de les opcions

Establir les opcions desitjades per a la seva sortida JSON.

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

Pas 5: Serialitzar amb opcions

Passar les opcions al mètode Serialitzar.

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

Pas 6: Salvar la sortida personalitzada

Salvar o utilitzar el JSON personalitzat.

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

Exemple de codi complet amb totes les opcions

Aquí teniu un exemple complet que mostra totes les opcions de personalització:

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

Comparar els formats de sortida

Format de sortida (PS3.18 estàndard)

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

Amb UseKeywordsAsJsonKeys = veritat

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

Escriure i escriure = veritat

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

Amb el nombreHandling = WriteAsString

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

Amb NúmeroHandling = AllowReadingFromString < WriteAsNumber

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

Utilitzar exemples de cas

Documentació de lectura humana

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

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

Per a PS3.18 Serveis web compatibles

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

Integració de JavaScript Frontend

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

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

Per a l’emmagatzematge de bases de dades

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

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

Consideracions importants

Avís d’interoperabilitat

Les opcions no estàndard poden trencar la compatibilitat amb alguns 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();

Recomanació de conformitat

Quan es requereix el compliment de DICOM PS3.18, utilitzeu les configuracions predefinides:

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

Serialització basada en el flux amb opcions

Per a arxius grans, utilitzeu la serialització basada en el flux:

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

Informació addicional

  • Opcions personalitzades afecten tant la serialització com la deserialització - assegurar opcions coherents quan les dades giren.
  • The WriteName L’opció afegeix els noms d’etiquetes DICOM que poden llegir-se humans i que augmenten la mida de JSON però milloren la lectura.
  • Alguns sistemes de tercers poden requerir formats JSON específics - consultar la seva documentació abans de triar opcions.

Conclusió

Aquest tutorial ha demostrat com personalitzar la producció de serialització de DICOM JSON en C# utilitzant Aspose.Medical. Per configurar DicomJsonSerializerOptions, es pot ajustar el format jSON per satisfer requisits específics d’integració mentre equilibren les necessitats de lectura, mida i interoperabilitat.

 Català