Rumah >pembangunan bahagian belakang >C++ >Bolehkah `IJsonTypeInfoResolver` System.Text.Json Mencapai Fungsi `IContractResolver`?
Dalam ruang nama System.Text.Json, penyesuaian kontrak sangat dijangkakan dalam .NET 7 dan kini tersedia dalam Pratonton 6. Metadata kontrak untuk jenis tertentu, diwakili oleh JsonTypeInfo
public interface IJsonTypeInfoResolver { JsonTypeInfo? GetTypeInfo(Type type, JsonSerializerOptions options); }
Membuat IJsonTypeInfoResolver Tersuai
Berikut ialah beberapa kaedah untuk mencipta tersuai anda IJsonTypeInfoResolver:
Subclass DefaultJsonTypeInfoResolver:
public class CustomJsonTypeInfoResolver : DefaultJsonTypeInfoResolver { public override JsonTypeInfo? GetTypeInfo(Type type, JsonSerializerOptions options) { // Implement your custom logic here return base.GetTypeInfo(type, options); } }
Add Action&pelt; Pengubah suai:
var resolver = new DefaultJsonTypeInfoResolver(); resolver.Modifiers.Add(typeInfo => { // Modify the default JsonTypeInfo here });
Buat IJsonTypeInfoResolver Baharu:
public class CustomJsonTypeInfoResolver : IJsonTypeInfoResolver { public JsonTypeInfo? GetTypeInfo(Type type, JsonSerializerOptions options) { // Implement your custom logic here return new JsonTypeInfo(type, JsonTypeInfoKind.Object); } }
Menggunakan Adat Anda Penyelesai
Setelah anda mempunyai penyelesai tersuai, tetapkannya melalui JsonSerializerOptions.TypeInfoResolver.
Contoh
Contoh berikut menunjukkan cara membuat DefaultJsonTypeInfoResolver yang bersiri hanya dipilih medan:
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, };
Atas ialah kandungan terperinci Bolehkah `IJsonTypeInfoResolver` System.Text.Json Mencapai Fungsi `IContractResolver`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!