Heim >Backend-Entwicklung >C++ >Wie kann ich Serialisierungsverträge in System.Text.Json anpassen?

Wie kann ich Serialisierungsverträge in System.Text.Json anpassen?

Barbara Streisand
Barbara StreisandOriginal
2025-01-03 11:45:40694Durchsuche

How Can I Customize Serialization Contracts in System.Text.Json?

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 hinzufügen. zur DefaultJsonTypeInfoResolver.Modifiers-Sammlung hinzufügen, um die Standard-JsonTypeInfo nach der Erstellung zu ändern.

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

  • PropertyNamePolicy und WriteIndented können festgelegt werden, um die Benennung und Einrückung von Eigenschaften anzupassen.
  • JsonPropertyInfo. ShouldSerialize kann für die bedingte Serialisierung von verwendet werden Eigenschaften.
  • System.Text.Json unterscheidet standardmäßig zwischen Groß- und Kleinschreibung, daher ist es wichtig, beim Filtern ausgewählter Felder einen Groß-/Kleinschreibungsvergleich zu verwenden.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn