중첩 JSON을 중첩 사전
.NET Core 3.1에서 System.Text.Json은 JSON을 역직렬화하는 표준 방법을 제공합니다. 기본적으로 JSON 객체는 JSON 데이터 구조에 대한 액세스를 제공하지만 값을 해당 C# 유형으로 자동 변환하지 않는 JsonElement 객체로 역직렬화됩니다.
문제:
목표는 중첩된 JSON 개체를 Dictionary
해결책:
달성하려면 System.Text.Json은 이 특정 유형 변환에 대해 기본 기능을 제공하지 않으므로 ObjectAsPrimitiveConverter라는 사용자 지정 JsonConverter가 필요합니다.
ObjectAsPrimitiveConverter는 다음 기능을 제공합니다.
유형 인식 deserialization:
숫자 처리:
객체 처리:
구현:
public class ObjectAsPrimitiveConverter : JsonConverter<object> { // Configuration options FloatFormat FloatFormat { get; init; } UnknownNumberFormat UnknownNumberFormat { get; init; } ObjectFormat ObjectFormat { get; init; } public ObjectAsPrimitiveConverter() : this(FloatFormat.Double, UnknownNumberFormat.Error, ObjectFormat.Expando) { } public ObjectAsPrimitiveConverter( FloatFormat floatFormat, UnknownNumberFormat unknownNumberFormat, ObjectFormat objectFormat) { this.FloatFormat = floatFormat; this.UnknownNumberFormat = unknownNumberFormat; this.ObjectFormat = objectFormat; } // ... implementation details ... } public enum FloatFormat { Double, Decimal, } public enum UnknownNumberFormat { Error, JsonElement, } public enum ObjectFormat { Expando, Dictionary, }
사용법:
JSON을 동적 개체(또는 구성된 경우 ExpandoObject)로 역직렬화하려면 ObjectAsPrimitiveConverter를 사용하여 다음과 같이 JsonSerializerOptions에 변환기를 지정합니다.
var options = new JsonSerializerOptions { Converters = { new ObjectAsPrimitiveConverter(floatFormat : FloatFormat.Double, unknownNumberFormat : UnknownNumberFormat.Error, objectFormat : ObjectFormat.Expando) }, WriteIndented = true, }; dynamic d = JsonSerializer.Deserialize<dynamic>(json, options);
참고:
위 내용은 .NET Core에서 유형 차별을 사용하여 중첩된 JSON을 중첩된 사전으로 역직렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!