Menyesuaikan Kontrak Pensirian dalam System.Text.Json
API System.Text.Json baharu menyediakan keupayaan untuk menyesuaikan kontrak bersiri, menawarkan fungsi yang serupa dengan Newtonsoft IContractResolver.
Penyesuaian Kontrak dalam .NET 7
Dalam .NET 7, penyesuaian kontrak tersedia melalui antara muka IJsonTypeInfoResolver. Antara muka ini membolehkan pembangun mencipta penyelesai tersuai yang mengembalikan contoh JsonTypeInfo yang dikonfigurasikan untuk jenis tertentu dan gabungan JsonSerializerOptions.
Mencipta Penyelesai Tersuai
Satu cara untuk mencipta penyelesai tersuai ialah untuk mensubkelaskan DefaultJsonTypeInfoResolver dan mengatasinya Kaedah GetTypeInfo(Type, JsonSerializerOptions). Sebagai alternatif, anda boleh menambah Action
Contoh: Selective Field Serialization
Untuk mereplikasi kefungsian kelas SelectiveSerializer. dalam System.Terializer Json, anda boleh menggunakan tindakan pengubah suai yang serupa dengan berikut:
resolver.Modifiers.Add(typeInfo => { if (typeInfo.Kind == JsonTypeInfoKind.Object) { foreach (var property in typeInfo.Properties) { if (property.GetMemberName() is {} name && !membersToSerializeSet.Contains(name)) property.ShouldSerialize = static (obj, value) => false; } } });
Pengubah suai ini menyemak sifat yang sepadan dengan nama medan yang ditentukan dan menetapkan sifat ShouldSerialize mereka kepada palsu untuk mengecualikannya daripada bersiri.
Menetapkan Penyelesai
Setelah penyelesai tersuai dicipta, ia boleh ditetapkan melalui Harta JsonSerializerOptions.TypeInfoResolver. Contohnya:
var options = new JsonSerializerOptions { TypeInfoResolver = new DefaultJsonTypeInfoResolver() .SerializeSelectedFields("FirstName,Email,Id"), // Other options as required };
Nota Tambahan
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyesuaikan Kontrak Pensirian dalam System.Text.Json?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!