在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); } }
使用您的客製化解析器
一旦有了自訂解析器,請通過JsonSerializer,Options. 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中文網其他相關文章!