.NET의 JSON 직렬화 및 역직렬화(마샬링 및 역 마샬링) - 개요
System.Text.Json
네임스페이스는 JSON(JavaScript Object Notation)에서 직렬화 및 역직렬화하는 기능을 제공합니다. Serialization은 개체의 상태, 즉 속성 값을 저장하거나 전송할 수 있는 형식으로 변환하는 프로세스입니다. 직렬화된 양식에는 개체의 연결된 메서드에 대한 정보가 포함되지 않습니다. Deserialization은 직렬화된 형식에서 개체를 다시 생성합니다.
System.Text.Json
라이브러리 디자인은 광범위한 기능 집합에 비해 높은 성능과 낮은 메모리 할당을 강조합니다. 기본 제공 UTF-8 지원은 UTF-8로 인코딩된 JSON 텍스트를 읽고 쓰는 프로세스를 최적화합니다. 이는 웹의 데이터와 디스크의 파일에 가장 널리 사용되는 인코딩입니다.
라이브러리는 메모리 내 DOM(문서 개체 모델)을 사용하기 위한 클래스도 제공합니다. 이 기능을 사용하면 JSON 파일 또는 문자열의 요소에 대한 임의 액세스가 가능합니다.
Visual Basic 코드에서 사용할 수 있는 라이브러리 부분에는 몇 가지 제한 사항이 있습니다. 자세한 내용은 Visual Studio 지원을 참조하세요.
라이브러리를 가져오는 방법
라이브러리는 .NET Core 3.0 이상 버전에서 공유 프레임워크의 일부로 기본 제공됩니다. 원본 생성 기능은 .NET 6 이상 버전에서 공유 프레임워크의 일부로 기본 제공됩니다. 원본 생성을 사용하려면 .NET 5 SDK 이상이 필요합니다.
.NET Core 3.0 이전 프레임워크 버전의 경우 System.Text.Json NuGet 패키지를 설치합니다. 패키지는 다음을 지원합니다.
- .NET Standard 2.0 이상
- .NET Framework 4.6.2 이상
- .NET Core 2.1 이상
- .NET 5 이상
런타임 리플렉션 및 컴파일 시간 원본 생성
기본적으로 는 System.Text.Json
은 리플렉션을 사용하여 런타임에 serialization 및 deserialization을 위해 개체의 속성에 액세스하는 데 필요한 메타데이터를 수집합니다. 또는 System.Text.Json
은 C# 원본 생성 기능을 사용하여 성능을 개선하고, 프라이빗 메모리 사용량을 줄이며, 어셈블리 트리밍을 용이하게 하여 앱 크기를 줄일 수 있습니다. 자세한 내용은 System.Text.Json에서 리플렉션 또는 원본 생성을 선택하는 방법을 참조하세요.
보안 정보
JsonSerializer를 디자인할 때 고려된 보안 위협 및 완화 방법에 대한 내용은 System.Text.Json
위협 모델을 참조하세요.
스레드로부터의 안전성
System.Text.Json
직렬 변환기는 스레드 안전을 염두에 두고 설계되었습니다. 실제로 일단 잠그기만 하면 JsonSerializerOptions 인스턴스를 여러 스레드에서 안전하게 공유할 수 있습니다.
JsonDocument는 JSON 값에 대해 변경 불가능하여 스레드로부터 안전한 DOM 표현을 제공하도록 설계되었습니다. 그러나 동시성 버그로 인해 JsonDocument
는 현재 스레드로부터 안전하지 않습니다.