Como personalizar a saída do DICOM JSON com a Opções de Serializer do DicomJson

Como personalizar a saída do DICOM JSON com a Opções de Serializer do DicomJson

Este tutorial demonstra como personalizar a saída de serialização DICOM JSON usando DicomJsonSerializerOptions em C#. A personalização permite que você controle os formatos-chave de jSON, inclua metadados adicionais e gerencie valores numéricos de acordo com os seus requisitos de integração.

Por que personalizar o JSON Output?

Diferentes sistemas podem exigir diferentes formatos JSON. A personalização permite:

  • Usar palavras-chave de leitura humana em vez de números de tag
  • Incluindo nomes de etiquetas para documentação
  • Verificar como os valores numéricos são representados
  • Reunião com requisitos específicos do sistema de terceiros

Título: Preparando o Meio Ambiente

  • Instale o Visual Studio ou qualquer .NET IDE compatível.
  • Crie um novo projeto de aplicação .NET 8 console.
  • Instale Aspose.Medical do NuGet Package Manager.

Opções de série disponíveis

OptionDescriçãoImpact
UseKeywordsAsJsonKeysUse palavras-chave DICOM em vez de números de tag como chaves JSON"PatientName" vs "00100010"
WriteKeywordIncluir o campo de palavras-chave em cada objeto de tagAdds "keyword": "PatientName"
WriteNameIncluir um campo de nome em cada objeto de tagAdds "name": "Patient's Name"
NumberHandlingRepresentação de Valor NuméricoNúmeros como linhas ou números JSON reais

Guia passo a passo para personalizar a saída JSON

Passo 1: Instalar Aspose.Medical

Adicione a Aspose.Medical Library ao seu projeto usando NuGet.

Install-Package Aspose.Medical

Passo 2: Incluir os espaços de nome necessários

Adicione referências aos espaços de nomes necessários em seu código.

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

Passo 3: Criar Opções Instância

Criar a DicomJsonSerializerOptions Por exemplo, para configurar as configurações.

DicomJsonSerializerOptions options = new DicomJsonSerializerOptions();

Passo 4: Configure opções

Defina as opções desejadas para a sua saída JSON.

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

Passo 5: Serialize com opções

Passar as opções para o método Serialize.

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

Passo 6: Salve a saída personalizada

Salve ou use o JSON personalizado.

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

Exemplo de código completo com todas as opções

Aqui está um exemplo completo que mostra todas as opções de customização:

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

Comparação de formatos de saída

Output padrão (formato PS3.18)

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

Usando palavras-chaveAsJsonKeys = verdade

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

Escrever e escrever = verdade

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

Com númeroHandling = WriteAsString

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

Com NúmeroHandling = AllowReadingFromString♰ WriteAsNumber

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

Use exemplos de caso

Documentação Humano-Leitável

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

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

PS3.18 Serviços Web Compatíveis

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

Integração do 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 armazenamento de banco de dados

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

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

Considerações importantes

Aviso de interoperabilidade

Opções não padrão podem quebrar a compatibilidade com alguns 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();

Recomendação de conformidade

Quando a conformidade com o DICOM PS3.18 é necessária, use as configurações padrão:

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

Serialização baseada em fluxo com opções

Para arquivos grandes, use serializar baseado em fluxo:

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

Informações adicionais

  • As opções personalizadas afetam tanto a serialização como a deseriização - garantindo opcoes consistentes quando os dados são rodados.
  • O que WriteName A opção adiciona nomes de tag DICOM que podem ser lidos pelo homem, o que aumenta o tamanho do JSON, mas melhora a leitura.
  • Alguns sistemas de terceiros podem exigir formatos JSON específicos - consulte a sua documentação antes de escolher opções.

Conclusão

Este tutorial demonstrou como personalizar a saída de serialização DICOM JSON em C# usando Aspose.Medical.Com a configuração de DicomJsonSerializerOptions, você pode ajustar o formato J SON para atender aos requisitos de integração específicos, enquanto equilibra as necessidades de leitura, tamanho e interoperabilidade.

 Português