DicomJsonSerializerOptions를 사용하여 DICOM JSON 출력을 사용자 정의하는 방법

DicomJsonSerializerOptions를 사용하여 DICOM JSON 출력을 사용자 정의하는 방법

이 튜토리얼은 C#에서 DicomJsonSerializerOptions를 사용하여 DICOM JSON 시리화 출력을 사용자 정의하는 방법을 보여줍니다.

왜 JSON 출력을 사용자 정의합니까?

다른 시스템은 다른 JSON 형식을 필요로 할 수 있습니다.

  • 숫자 대신 인간 읽을 수있는 키워드를 사용하십시오.
  • 문서에 대한 태그 이름을 포함
  • 숫자 값이 어떻게 표현되는지 확인하기
  • 특정 제3자 시스템 요구 사항을 충족

원제 : Environment Preparation

  • Visual Studio 또는 모든 호환되는 .NET IDE를 설정합니다.
  • 새로운 .NET 8 콘솔 애플리케이션 프로젝트를 만드십시오.
  • NuGet 패키지 관리자에서 Aspose.Medical을 설치합니다.

사용할 수 있는 시리화 옵션

옵션설명Impact
UseKeywordsAsJsonKeysJSON 키로 태그 번호 대신 DICOM 키워드를 사용하십시오."PatientName" vs "00100010"
WriteKeyword각 태그 개체에 키워드 필드를 포함Adds "keyword": "PatientName"
WriteName각 태그 개체에 이름 필드를 포함Adds "name": "Patient's Name"
NumberHandling컨트롤 숫자 값 표현줄 또는 실제 JSON 번호로 숫자

JSON 출력 사용자 정의에 대한 단계별 가이드

단계 1 : Aspose.Medical 설치

NuGet을 사용하여 프로젝트에 Aspose.Medical 도서관을 추가합니다.

Install-Package Aspose.Medical

단계 2 : 필요한 이름 공간을 포함

코드에 필요한 이름 공간에 참조를 추가합니다.

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

단계 3: 옵션 인스턴스 만들기

만들기 A DicomJsonSerializerOptions 예를 들어 설정을 설정합니다.

DicomJsonSerializerOptions options = new DicomJsonSerializerOptions();

단계 4 : 옵션 설정

JSON 출력에 대한 원하는 옵션을 설정합니다.

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

5단계: 옵션으로 시리얼화

옵션을 Serialize 방법으로 이동합니다.

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

단계 6 : 사용자 지정 출력 저장

사용자 지정 JSON을 저장하거나 사용하십시오.

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

모든 옵션과 함께 완전한 코드 예제

다음은 모든 사용자 정의 옵션을 보여주는 완전한 예입니다 :

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

출력 형식의 비교

기본 출력 (표준 PS3.18 형식)

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

사용자 키워드AsJsonKeys = 진실

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

WriteKeyword 및 WreteName = 진실

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

숫자로 처리 = WriteAsString

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

숫자로 행동 = 허용ReadingFromString♰ WriteAsNumber

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

사례 예제 사용

인간 읽을 수 있는 문서

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

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

PS3.18 만족스러운 웹 서비스

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

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

데이터베이스 스토리지

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

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

중요한 고려 사항

상호 작용 경고

비 표준 옵션은 일부 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();

준수에 대한 권고

DICOM PS3.18 준수가 필요한 경우 기본 설정을 사용하십시오.

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

옵션을 가진 스트림 기반 시리화

큰 파일을 위해, 스트림 기반 시리즈를 사용하십시오 :

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

추가 정보

  • 사용자 지정 옵션은 serialization 및 deserialisation 모두에 영향을 미칩니다 - 라운드 트리핑 데이터에서 일관된 선택을 보장합니다.
  • 그들의 WriteName 옵션은 인간 읽을 수 있는 DICOM 태그 이름을 추가하여 JSON 크기를 늘리지만 읽기 가능성을 향상시킵니다.
  • 일부 제 3 자 시스템은 특정 JSON 형식을 필요로 할 수 있습니다 - 옵션을 선택하기 전에 문서를 확인하십시오.

결론

이 튜토리얼은 Aspose.Medical을 사용하여 C#에서 DICOM JSON 시리화 출력을 사용자 정의하는 방법을 보여줍니다.DicomJsonSerializerOptions를 구성함으로써, 구체적인 통합 요구 사항을 충족시키기 위해 jSON 형식을 조정할 수 있으며 읽기, 크기 및 상호 작용 필요를 균형 잡을 수 있습니다.

 한국어