Im System.Text.Json-Namespace wird die Vertragsanpassung in .NET 7 mit Spannung erwartet und ist derzeit in verfügbar Vorschau 6. Vertragsmetadaten für einen bestimmten Typ, dargestellt durch JsonTypeInfo
public interface IJsonTypeInfoResolver { JsonTypeInfo? GetTypeInfo(Type type, JsonSerializerOptions options); }
Erstellen eines benutzerdefinierten IJsonTypeInfoResolvers
Hier sind einige Methoden zum Erstellen Ihres benutzerdefinierten IJsonTypeInfoResolvers:
Unterklasse DefaultJsonTypeInfoResolver:
public class CustomJsonTypeInfoResolver : DefaultJsonTypeInfoResolver { public override JsonTypeInfo? GetTypeInfo(Type type, JsonSerializerOptions options) { // Implement your custom logic here return base.GetTypeInfo(type, options); } }
Aktion hinzufügen
var resolver = new DefaultJsonTypeInfoResolver(); resolver.Modifiers.Add(typeInfo => { // Modify the default JsonTypeInfo here });
Neuen IJsonTypeInfoResolver erstellen:
public class CustomJsonTypeInfoResolver : IJsonTypeInfoResolver { public JsonTypeInfo? GetTypeInfo(Type type, JsonSerializerOptions options) { // Implement your custom logic here return new JsonTypeInfo(type, JsonTypeInfoKind.Object); } }
Verwenden Ihr benutzerdefinierter Resolver
Sobald Sie Wenn Sie einen benutzerdefinierten Resolver haben, legen Sie ihn über JsonSerializerOptions.TypeInfoResolver fest.
Beispiel
Das folgende Beispiel zeigt, wie ein DefaultJsonTypeInfoResolver erstellt wird, der nur ausgewählte Felder serialisiert:
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, };
Das obige ist der detaillierte Inhalt vonKann „IJsonTypeInfoResolver' von System.Text.Json die Funktionalität von „IContractResolver' erreichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!