Jak dostosować DICOM JSON Output z DicomJsonSerializerOptions

Jak dostosować DICOM JSON Output z DicomJsonSerializerOptions

Ten tutorial pokazuje, jak dostosować wyjście serializacji DICOM JSON za pomocą DicomJsonSerializerOptions w C#. Dostosowanie pozwala kontrolować formaty kluczowe jSON, obejmować dodatkowe metadane i obsługiwać wartości numeryczne zgodnie z wymaganiami integracji.

Dlaczego dostosowywać JSON Output?

Różne systemy mogą wymagać różnych formatów JSON. Dostosowanie umożliwia:

  • Używanie słów kluczowych czytelnych przez ludzi zamiast numerów tagowych
  • Włącz nazwy etykiet do dokumentacji
  • Sprawdź, w jaki sposób wartości numeryczne są reprezentowane
  • spełnienie specyficznych wymagań systemowych stron trzecich

Wymagania: przygotowanie środowiska

  • Zainstaluj program Visual Studio lub dowolny kompatybilny .NET IDE.
  • Stwórz nowy projekt aplikacji konsoli .NET 8.
  • Instaluj Aspose.Medical z programu NuGet Package Manager.

Dostępne opcje serializacji

OpcjaOpisImpact
UseKeywordsAsJsonKeysUżyj słów kluczowych DICOM zamiast numerów tagowych jako kluczy JSON"PatientName" ws "00100010"
WriteKeywordWłącz pole słów kluczowych w każdym obiekcie tagowymAdds "keyword": "PatientName"
WriteNameWłącz pole nazwy w każdym obiekcie tagowymAdds "name": "Patient's Name"
NumberHandlingKontrola wartości numerycznejLiczby jako struny lub rzeczywiste liczby JSON

Przewodnik krok po kroku do dostosowania JSON Output

Krok 1: Instalacja Aspose.Medical

Dodaj do projektu bibliotekę Aspose.Medical za pomocą NuGet.

Install-Package Aspose.Medical

Krok 2: Włącz niezbędne przestrzenie nazwowe

Dodaj odniesienia do wymaganych przestrzeni nazwowych w kodzie.

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

Krok 3: Tworzenie instancji opcji

Tworzenie A DicomJsonSerializerOptions Przykładem jest konfiguracja ustawień.

DicomJsonSerializerOptions options = new DicomJsonSerializerOptions();

Krok 4: Konfiguracja opcji

Ustaw pożądane opcje dla Twojego wyjścia JSON.

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

Krok 5: Serio z opcjami

Przeprowadź opcje do metody Serialize.

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

Krok 6: Zaoszczędź dostosowany wynik

Zapisz lub skorzystaj z dostosowanego JSON.

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

Pełny przykład kodu ze wszystkimi opcjami

Oto kompletny przykład pokazujący wszystkie opcje dostosowania:

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

Porównanie formatu wyjścia

Wyjście standardowe (format PS3.18 standardowy)

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

Z użyciemKeywordsAsJsonKeys = prawda

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

Słowo pisemne i słowo napisane = prawda

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

Z numerem = WriteAsString

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

Wraz z numeremPrzekierowanie = AllowReadingFromStringMałżeństwo WriteAsNumber

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

Użyj przykładów przypadków

Dla ludzko czytelnej dokumentacji

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

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

Dla PS3.18 Kompatybilne usługi internetowe

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

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

Do przechowywania baz danych

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

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

Ważne uwagi

Ostrzeżenie interoperacyjności

Niestandardowe opcje mogą zakłócać kompatybilność z niektórymi parsersami 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();

Zalecenia dotyczące zgodności

Jeśli wymagane jest zgodność z DICOM PS3.18, użyj ustawień domyślnych:

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

Serijalizacja opcjonalna z opcjami

W przypadku dużych plików użyj serializacji opartej na strumieniu:

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

Dodatkowe informacje

  • Dostosowane opcje wpływają zarówno na serializację, jak i deseralizacji - zapewniają spójne opcji podczas krążenia danych.
  • W tym WriteName Opcja dodaje ludzkie nazwy tagów DICOM, które zwiększają rozmiar JSON, ale poprawiają czytelność.
  • Niektóre systemy stron trzecich mogą wymagać określonych formatów JSON - zapoznaj się z ich dokumentacją przed wyborem opcji.

konkluzja

Ten tutorial wykazał, jak dostosowywać wynik serializacji DICOM JSON w C# za pomocą Aspose.Medical. poprzez konfigurację DicomJsonSerializerOptions, można dostosować format jSON do spełnienia określonych wymagań integracji, jednocześnie zrównoważając czytelność, rozmiar i potrzeby interoperacyjności.

 Polski