Heim >Backend-Entwicklung >C++ >Wie kann ich Serialisierungsverträge in System.Text.Json anpassen?
Anpassen von Serialisierungsverträgen in System.Text.Json
Die neue System.Text.Json-API bietet die Möglichkeit, Serialisierungsverträge anzupassen Funktionalität ähnlich dem IContractResolver von Newtonsoft.
Vertragsanpassung in .NET 7
In .NET 7 ist die Vertragsanpassung über die IJsonTypeInfoResolver-Schnittstelle verfügbar. Mit dieser Schnittstelle können Entwickler benutzerdefinierte Resolver erstellen, die konfigurierte JsonTypeInfo-Instanzen für bestimmte Typen und JsonSerializerOptions-Kombinationen zurückgeben.
Erstellen eines benutzerdefinierten Resolvers
Eine Möglichkeit, einen benutzerdefinierten Resolver zu erstellen, ist um den DefaultJsonTypeInfoResolver in eine Unterklasse umzuwandeln und die GetTypeInfo(Type, JsonSerializerOptions)-Methode zu überschreiben. Alternativ können Sie eine Aktion
Beispiel: Selektive Feldserialisierung
Um die Funktionalität der SelectiveSerializer-Klasse in System.Text zu replizieren. Json können Sie eine Modifiziereraktion ähnlich der verwenden Folgendes:
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; } } });
Dieser Modifikator sucht nach Eigenschaften, die mit angegebenen Feldnamen übereinstimmen, und setzt ihre ShouldSerialize-Eigenschaft auf false, um sie von der Serialisierung auszuschließen.
Einstellen des Resolvers
Sobald ein benutzerdefinierter Resolver erstellt wurde, kann er über die Eigenschaft JsonSerializerOptions.TypeInfoResolver festgelegt werden. Zum Beispiel:
var options = new JsonSerializerOptions { TypeInfoResolver = new DefaultJsonTypeInfoResolver() .SerializeSelectedFields("FirstName,Email,Id"), // Other options as required };
Zusätzliche Hinweise
Das obige ist der detaillierte Inhalt vonWie kann ich Serialisierungsverträge in System.Text.Json anpassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!