Maison >développement back-end >C++ >Comment personnaliser la sérialisation JSON dans .NET 7 avec IJsonTypeInfoResolver ?

Comment personnaliser la sérialisation JSON dans .NET 7 avec IJsonTypeInfoResolver ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-28 22:47:13149parcourir

How to Customize JSON Serialization in .NET 7 with IJsonTypeInfoResolver?

Comment implémenter IContractResolver dans System.Text.Json

Introduction

L'espace de noms System.Text.Json est un alternative moderne à Newtonsoft.Json, offrant une sérialisation et une désérialisation JSON hautes performances dans .NET. Une fonctionnalité qui n'était auparavant pas disponible dans System.Text.Json était un moyen de personnaliser le processus de résolution de contrat, similaire à l'interface IContractResolver dans Newtonsoft.Json. Cependant, cette fonctionnalité est désormais disponible dans .NET 7 grâce à l'implémentation de IJsonTypeInfoResolver.

Answer

Nouvelle fonctionnalité .NET 7 : IJsonTypeInfoResolver

Depuis .NET 7, l'espace de noms System.Text.Json introduit l'interface IJsonTypeInfoResolver, qui permet la personnalisation des contrats. À l'aide de cette interface, les développeurs peuvent créer des résolveurs de contrat personnalisés qui modifient les métadonnées d'un type spécifique lors de la sérialisation et de la désérialisation.

DefaultJsonTypeInfoResolver

L'équipe System.Text.Json a a fourni un résolveur de contrat par défaut, DefaultJsonTypeInfoResolver, qui implémente l'interface IJsonTypeInfoResolver. Ce résolveur offre des fonctionnalités similaires à DefaultContractResolver dans Newtonsoft.Json. Vous pouvez sous-classer DefaultJsonTypeInfoResolver ou y ajouter des modificateurs pour personnaliser les métadonnées du contrat en fonction de vos besoins.

Utilisation de DefaultJsonTypeInfoResolver avec des modificateurs

Pour adapter votre classe SelectiveSerializer pour qu'elle fonctionne avec System.Text.Json, vous pouvez utiliser la méthode d'extension SerializeSelectedFields sur le DefaultJsonTypeInfoResolver :

var options = new JsonSerializerOptions
{
    TypeInfoResolver = new DefaultJsonTypeInfoResolver()
        .SerializeSelectedFields("FirstName,Email,Id"),
    // Add other options as required
    PropertyNamingPolicy = JsonNamingPolicy.CamelCase, 
    WriteIndented = true,
};

Cela sérialisera sélectivement uniquement les propriétés spécifiées lors de la sérialisation.

Notes supplémentaires

  • Pour la sérialisation conditionnelle des propriétés , vous pouvez utiliser JsonPropertyInfo.ShouldSerialize méthode.
  • JsonPropertyInfo.AttributeProvider renvoie le PropertyInfo ou FieldInfo sous-jacent lorsqu'il est créé par les résolveurs de réflexion ou de génération source.
  • Les métadonnées de sérialisation doivent être construites à l'aide d'une logique de chaîne invariante en fonction des paramètres régionaux.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn