System.Text.Json 네임스페이스에서 계약 사용자 정의는 .NET 7에서 간절히 기대되며 현재 다음에서 사용할 수 있습니다. 미리보기 6. JsonTypeInfo
public interface IJsonTypeInfoResolver { JsonTypeInfo? GetTypeInfo(Type type, JsonSerializerOptions options); }
사용자 정의 IJsonTypeInfoResolver 생성
다음은 사용자 정의 IJsonTypeInfoResolver를 생성하는 몇 가지 방법입니다.
하위 클래스 DefaultJsonTypeInfoResolver:
public class CustomJsonTypeInfoResolver : DefaultJsonTypeInfoResolver { public override JsonTypeInfo? GetTypeInfo(Type type, JsonSerializerOptions options) { // Implement your custom logic here return base.GetTypeInfo(type, options); } }
액션 추가
var resolver = new DefaultJsonTypeInfoResolver(); resolver.Modifiers.Add(typeInfo => { // Modify the default JsonTypeInfo here });
새 IJsonTypeInfoResolver 만들기:
public class CustomJsonTypeInfoResolver : IJsonTypeInfoResolver { public JsonTypeInfo? GetTypeInfo(Type type, JsonSerializerOptions options) { // Implement your custom logic here return new JsonTypeInfo(type, JsonTypeInfoKind.Object); } }
사용 당신의 맞춤 Resolver
사용자 지정 확인자가 있으면 JsonSerializerOptions.TypeInfoResolver를 통해 설정하세요.
예
다음 예는 생성 방법을 보여줍니다. 선택된 것만 직렬화하는 DefaultJsonTypeInfoResolver 필드:
using System.Text.Json.Serialization; public static class JsonSerializerExtensions { public static DefaultJsonTypeInfoResolver SerializeSelectedFields(this DefaultJsonTypeInfoResolver resolver, IEnumerable<string> membersToSerialize) { resolver.Modifiers.Add(typeInfo => { if (typeInfo.Kind == JsonTypeInfoKind.Object) { foreach (var property in typeInfo.Properties) { if (!membersToSerialize.Contains(property.GetMemberName())) property.ShouldSerialize = static (obj, value) => false; } } }); return resolver; } } // Usage var options = new JsonSerializerOptions { TypeInfoResolver = new DefaultJsonTypeInfoResolver() .SerializeSelectedFields("FirstName", "Email", "Id"), PropertyNamingPolicy = JsonNamingPolicy.CamelCase, WriteIndented = true, };
위 내용은 System.Text.Json의 `IJsonTypeInfoResolver`가 `IContractResolver`의 기능을 달성할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!