Come personalizzare DICOM JSON Output con DicomJsonSerializerOptions

Come personalizzare DICOM JSON Output con DicomJsonSerializerOptions

Questo tutorial dimostra come personalizzare la produzione di serializzazione di DICOM JSON utilizzando DicomJsonSerializerOptions in C#. La personalizzazione ti consente di controllare i formati chiave di jSON, includere metadati aggiuntivi e gestire i valori numerici in base ai tuoi requisiti di integrazione.

Perché personalizzare JSON Output?

Diversi sistemi potrebbero richiedere diversi formati JSON. la personalizzazione consente:

  • Utilizzare le parole chiave leggibili umane invece di numeri di tag
  • Includere i nomi di tag per la documentazione
  • Verificare come i valori numerici sono rappresentati
  • soddisfare i requisiti specifici del sistema di terze parti

Prerequisiti: preparare l’ambiente

  • Inserisci Visual Studio o qualsiasi compatibile .NET IDE.
  • Creare un nuovo progetto di applicazione .NET 8 console.
  • Installare Aspose.Medical dal NuGet Package Manager.

Opzioni di serializzazione disponibili

OptionDescrizioneImpact
UseKeywordsAsJsonKeysUtilizzare le parole chiave DICOM invece dei numeri di tag come chiavi JSON"PatientName" vs "00100010"
WriteKeywordIncludere il campo Keyword in ogni oggetto tagAdds "keyword": "PatientName"
WriteNameInserisci il campo di nome in ogni oggetto tagAdds "name": "Patient's Name"
NumberHandlingLa rappresentazione dei valori numericiNumeri come stringhe o numeri JSON reali

Guida passo dopo passo per personalizzare la produzione JSON

Passo 1: Installare Aspose.Medical

Aggiungi la biblioteca medica Aspose al tuo progetto utilizzando NuGet.

Install-Package Aspose.Medical

Passo 2: Includere gli spazi di nome necessari

Aggiungi riferimenti agli spazi di nome richiesti nel tuo codice.

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

Passo 3: Creare l’istanza delle opzioni

Creare a DicomJsonSerializerOptions per configurare le impostazioni.

DicomJsonSerializerOptions options = new DicomJsonSerializerOptions();

Passo 4: Configurare le opzioni

Imposta le opzioni desiderate per la tua uscita JSON.

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

Passo 5: Serializzare con le opzioni

Passare le opzioni al metodo di serializzazione.

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

Passo 6: Salva la uscita personalizzata

Salva o utilizza il JSON personalizzato.

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

Esempio di codice completo con tutte le opzioni

Ecco un esempio completo che mostra tutte le opzioni di personalizzazione:

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

Confronto dei formati di uscita

Sviluppo standard (formato standard PS3.18)

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

Con UseKeywordsAsJsonKeys = vero

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

Con WriteKeyword e WriteName = vero

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

Con numeroHandling = WriteAsString

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

Con NumberHandling = AllowReadingFromStringḳ WriteAsNumber

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

Utilizzare esempi di caso

Per la documentazione leggibile

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

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

Per PS3.18 Servizi Web Compliant

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

Integrazione di 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 lo storage di database

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

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

Considerazioni importanti

Avviso di interoperabilità

Le opzioni non standard possono interrompere la compatibilità con alcuni parseri 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();

Raccomandazione per la conformità

Quando è richiesto il rispetto di DICOM PS3.18, utilizzare le impostazioni predefinite:

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

Serializzazione basata sul flusso con opzioni

Per i file di grandi dimensioni, utilizzare la serializzazione basata sul flusso:

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

Informazioni aggiuntive

  • Le opzioni personalizzate influenzano sia la serializzazione che la desertificazione - assicurando opzione coerente quando i dati sono girati.
  • Il WriteName L’opzione aggiunge i nomi di tag DICOM leggibili per gli esseri umani che aumentano la dimensione JSON ma migliora la lettura.
  • Alcuni sistemi di terze parti potrebbero richiedere formati JSON specifici - consultare la loro documentazione prima di scegliere le opzioni.

conclusione

Questo tutorial ha dimostrato come personalizzare la produzione di serializzazione di DICOM JSON in C# utilizzando Aspose.Medical.Configurando DicomJsonSerializerOptions, è possibile adattare il formato J SON per soddisfare i requisiti di integrazione specifici mentre bilanciando le esigenze di lettura, dimensione e interoperabilità.

 Italiano