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
| Option | Descrizione | Impact |
|---|---|---|
UseKeywordsAsJsonKeys | Utilizzare le parole chiave DICOM invece dei numeri di tag come chiavi JSON | "PatientName" vs "00100010" |
WriteKeyword | Includere il campo Keyword in ogni oggetto tag | Adds "keyword": "PatientName" |
WriteName | Inserisci il campo di nome in ogni oggetto tag | Adds "name": "Patient's Name" |
NumberHandling | La rappresentazione dei valori numerici | Numeri 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.MedicalPasso 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 optionsSerializzazione 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
WriteNameL’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à.