Comment personnaliser DICOM JSON Output avec DicomJsonSerializerOptions

Comment personnaliser DICOM JSON Output avec DicomJsonSerializerOptions

Ce tutoriel montre comment personnaliser la sortie de sérialisation DICOM JSON à l’aide de DicomJsonSerializerOptions en C#. La personnalisation vous permet de contrôler les formats clés d’JSON, incluant des métadonnées supplémentaires et de gérer les valeurs numériques selon vos exigences d’intégration.

Pourquoi personnaliser la sortie JSON ?

Différents systèmes peuvent nécessiter différents formats JSON. La personnalisation permet:

  • Utiliser des mots-clés humains à lire au lieu de numéros d’étiquette
  • Inclure les noms de tags pour la documentation
  • Vérifier comment les valeurs numériques sont représentées
  • Réaliser les exigences spécifiques du système de tiers

Étiquette : Préparer l’environnement

  • Configurez Visual Studio ou tout IDE .NET compatible.
  • Créer un nouveau projet d’application pour la console .NET 8.
  • Installez Aspose.Medical à partir du NuGet Package Manager.

Options de sérialisation disponibles

OptionDescriptionImpact
UseKeywordsAsJsonKeysUtilisez les mots-clés DICOM au lieu des nombres d’étiquette comme clés JSON"PatientName" vs "00100010"
WriteKeywordInclure un champ de mots-clés dans chaque objet de tagAdds "keyword": "PatientName"
WriteNameInclure le champ de nom dans chaque objet d’étiquetteAdds "name": "Patient's Name"
NumberHandlingLa représentation numérique de la valeurNombres en tant que lignes ou numéros JSON réels

Guide d’étape par étape pour personnaliser la sortie JSON

Étape 1 : Installer Aspose.Medical

Ajoutez la bibliothèque Aspose.Medical à votre projet en utilisant NuGet.

Install-Package Aspose.Medical

Étape 2 : Inclure les espaces de nom nécessaires

Ajoutez des références aux espaces de nom requis dans votre code.

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

Étape 3 : Créer des options

Créer A DicomJsonSerializerOptions pour configurer les paramètres.

DicomJsonSerializerOptions options = new DicomJsonSerializerOptions();

Étape 4 : Configurer les options

Définissez les options souhaitées pour votre sortie JSON.

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

Étape 5 : sérialiser avec les options

Passez les options à la méthode de sérialisation.

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

Étape 6 : sauvegarder la sortie personnalisée

Enregistrer ou utiliser le JSON personnalisé.

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

Exemple de code complet avec toutes les options

Voici un exemple complet qui montre toutes les options de personnalisation:

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

Comparer les formats de sortie

Défaut de sortie (Format PS3.18 standard)

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

Avec UseKeywordsAsJsonKeys = vrai

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

Avec WriteKeyword et WriteName = vrai

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

Avec NumberHandling = WriteAsString

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

Avec NuméroHandling = AllowReadingFromString et WriteAsNumber

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

Utilisez des exemples de cas

Pour la documentation humaine lisible

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

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

Pour PS3.18 Services Web Compliants

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

Pour l’intégration 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);

Pour le stockage de base de données

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

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

Les considérations importantes

Avertissement d’interopérabilité

Les options non standard peuvent interrompre la compatibilité avec certains 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();

Recommandation de conformité

Lorsque la conformité DICOM PS3.18 est requise, utilisez les paramètres par défaut :

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

Sérialisation basée sur le courant avec des options

Pour les fichiers majeurs, utilisez la sérialisation basée sur le courant :

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

Informations supplémentaires

  • Les options personnalisées affectent à la fois la sérialisation et la désérialisation - assurer des options cohérentes lors de la sortie des données.
  • Le WriteName L’option ajoute les noms d’étiquettes DICOM qui peuvent être lues par l’homme, ce qui augmente la taille de JSON mais améliore la lecture.
  • Certains systèmes tiers peuvent nécessiter des formats JSON spécifiques - consultez leur documentation avant de choisir les options.

Conclusion

Ce tutoriel a démontré comment personnaliser la sortie de sérialisation DICOM JSON en C# en utilisant Aspose.Medical.En configurant DicomJsonSerializerOptions, vous pouvez ajuster le format J SON pour répondre aux exigences d’intégration spécifiques tout en équilibrant les besoins de lecture, de taille et d’interopérabilité.

 Français