Cómo personalizar la salida de DICOM JSON con DicomJsonSerializerOptions

Cómo personalizar la salida de DICOM JSON con DicomJsonSerializerOptions

Este tutorial demuestra cómo personalizar la salida de serialización de DICOM JSON utilizando DicomJsonSerializerOptions en C#. La personalización le permite controlar los formatos clave de jSON, incluir metadatos adicionales y gestionar los valores numéricos de acuerdo con sus requisitos de integración.

¿Por qué personalizar la salida de JSON?

Los diferentes sistemas pueden requerir diferentes formatos JSON. La personalización permite:

  • Utilizar las palabras clave que se pueden leer en lugar de los números de etiquetas
  • Incluye los nombres de etiquetas para la documentación
  • Controlar cómo se representan los valores numéricos
  • Cumplimiento de los requisitos específicos del sistema de terceros

Requisitos: Preparación del medio ambiente

  • Instalar Visual Studio o cualquier compatible .NET IDE.
  • Crea un nuevo proyecto de aplicación .NET 8 consola.
  • Instalar Aspose.Medical desde el NuGet Package Manager.

Opciones de serialización disponibles

OpciónDescripciónImpact
UseKeywordsAsJsonKeysUtilice las palabras clave DICOM en lugar de los números de etiqueta como las claves JSON"PatientName" El vs "00100010"
WriteKeywordIncluir el campo de palabras clave en cada objeto de etiquetaAdds "keyword": "PatientName"
WriteNameIncluir el campo de nombre en cada objeto de etiquetaAdds "name": "Patient's Name"
NumberHandlingRepresentación de Valor NuméricoNúmeros como líneas o números JSON reales

Guía paso a paso para personalizar la salida de JSON

Paso 1: Instalar Aspose.Medical

Añade la biblioteca de Aspose.Medical a su proyecto utilizando NuGet.

Install-Package Aspose.Medical

Paso 2: Incluir los espacios de nombre necesarios

Añade las referencias a los espacios de nombre requeridos en su código.

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

Paso 3: Crea la instancia de opciones

Creación a DicomJsonSerializerOptions instancia para configurar las configuraciones.

DicomJsonSerializerOptions options = new DicomJsonSerializerOptions();

Paso 4: Configure las opciones

Configure las opciones deseadas para su salida JSON.

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

Paso 5: Serializar con las opciones

Transmitir las opciones al método de serializar.

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

Paso 6: Salva la salida personalizada

Salva o utilice el JSON personalizado.

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

Exemplos de código completos con todas las opciones

Aquí hay un ejemplo completo que muestra todas las opciones de personalización:

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 los formatos de salida

Página de inicio (en formato PS3.18)

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

Con UseKeywordsAsJsonKeys = verdad

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

Con WriteKeyword y WriteName = verdad

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

Con númeroHandling = WriteAsString

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

Con NúmeroHandling = AllowReadingFromString♰ WriteAsNumber

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

Usar ejemplos de caso

Documentación para la lectura humana

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

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

Para PS3.18 Servicios 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ón 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);

Para el almacenamiento de bases de datos

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

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

Consideraciones importantes

Aviso de Interoperabilidad

Las opciones no estándar pueden romper la compatibilidad con algunos parsers de 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();

Recomendación de conformidad

Cuando se requiere el cumplimiento de DICOM PS3.18, utilice las configuraciones predefinidas:

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

Serialización basada en flujo con opciones

Para los archivos grandes, utilice la serialización basada en el flujo:

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ón adicional

  • Las opciones personalizadas afectan tanto a la serialización como a las deserializaciones - garantizar opciones consistentes cuando los datos son rodados.
  • El WriteName La opción añade los nombres de etiquetas DICOM que se pueden leer por el hombre, lo que aumenta el tamaño de JSON pero mejora la lectura.
  • Algunos sistemas de terceros pueden requerir formatos JSON específicos - consultar su documentación antes de elegir opciones.

Conclusión

Este tutorial ha demostrado cómo personalizar la salida de serializacin de DICOM JSON en C# utilizando Aspose.Medical.Configurando DicomJsonSerializerOptions, se puede ajustar el formato de jSON para satisfacer los requisitos de integración específicos al tiempo que equilibra las necesidades de lectura, tamaño y interoperabilidad.

 Español