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ón | Descripción | Impact |
|---|---|---|
UseKeywordsAsJsonKeys | Utilice las palabras clave DICOM en lugar de los números de etiqueta como las claves JSON | "PatientName" El vs "00100010" |
WriteKeyword | Incluir el campo de palabras clave en cada objeto de etiqueta | Adds "keyword": "PatientName" |
WriteName | Incluir el campo de nombre en cada objeto de etiqueta | Adds "name": "Patient's Name" |
NumberHandling | Representación de Valor Numérico | Nú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.MedicalPaso 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 optionsSerializació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
WriteNameLa 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.