System.Text.Json (JSON)으로 마이그레이션
이 System.Text.Json
라이브러리는 기본적으로 문자 그대로의 결정론적 행동을 강조하지 않으며, 호출자를 대신하여 추측하거나 해석하는 것을 금지합니다. 이 라이브러리는 보안과 성능을 위해 의도적으로 이렇게 설계되었습니다.
System.Text.Json
는 매우 구성 가능하며, 그 기능을 사용하여 직렬화된 형식에 필요한 변경을 최소화할 수 있지만, 기존 형식을 가능한 한 적은 변경으로 처리하는 것과 형식을 리팩터링하여 관용적이고 안전한 직렬화를 가능하게 하는 것 사이의 장단점을 고려하는 것이 중요합니다.
BinaryFormatter 에서 System.Text.Json
로 마이그레이션할 때는 다음과 같은 동작 및 옵션을 적어 두는 것이 중요합니다.
기본적으로
필드는 직렬화되거나 역직렬화되지 않지만 serialization대해 주석을수 있습니다. JsonSerializerOptions.IncludeFields
또는 직렬화되는 형식에 대한 모든 공용 필드를 포함하도록true
신중하게 설정할 수 있습니다.JsonSerializerOptions options = new() { IncludeFields = true };
기본적으로 System.Text.Json은 프라이빗 필드와 속성을 무시합니다. 이
[JsonInclude]
특성을 사용하여 속성에서 public이 아닌 접근자를 사용하도록 설정할 수 있습니다. 프라이빗 필드를 포함하려면 몇 가지 사소한 추가 작업이 필요합니다.System.Text.Json 는 읽기 전용 필드 또는 속성을 역직렬화할 수 없지만
[JsonConstructor]
, 지정된 생성자를 사용하여 역직렬화 시 형식의 인스턴스를 만들어야 함을 나타내는 데 특성을 사용할 수 있습니다. 생성자는 읽기 전용 필드와 속성을 설정할 수 있습니다.특정 형식의 기본 serialization 동작을 재정의하기 위해서는 사용자 지정 변환기를작성할 수 있습니다.
많은 컬렉션의 직렬화 및 역직렬화를 지원하지만 제한 사항이 있습니다. serialization 및 deserialization에 대해 어떤 형식 및 컬렉션이 지원되는지에 대한 더 자세한 정보는 지원되는 형식 설명서를 참조하세요.
기본 제공 지원이 없는 다른 형식은 다음과 같습니다:
DataSet
,DataTable
,DBNull
,TimeZoneInfo
,Type
,ValueTuple
. 그러나 이러한 형식을 지원하는 사용자 지정 변환기를 작성할 수 있습니다.형식이
[JsonDerivedType]
특성 또는 사용자 지정 변환기를 통해 명시적으로 옵트인된 다형 형식 계층 구조 직렬화 및 역직렬화 지원합니다. 개방형 상속 계층은 지원되지 않으며 다형성으로 왕복하려면 알려진 모든 파생 형식에 대한 형식 판별자 식별자가 필요합니다.속성에
[JsonIgnore]
특성이 있을 경우 serialization 시 JSON에서 해당 속성이 생략됩니다.System.Text.Json
에서 참조를 보존하고 순환 참조를 처리하려면JsonSerializerOptions.ReferenceHandler
을ReferenceHandler.Preserve
로 설정합니다.Serialization 는 사용자 지정 계약으로 광범위하게 사용자 지정할 수 있으며, 직렬화된 형식에 대한 변경 내용을 최소화하면서 많은 시나리오의 차단을 해제할 수 있습니다.
.NET