Maison >développement back-end >C++ >System.Text.Json peut-il réaliser une sérialisation sélective comme IContractResolver de Newtonsoft ?

System.Text.Json peut-il réaliser une sérialisation sélective comme IContractResolver de Newtonsoft ?

DDD
DDDoriginal
2025-01-04 07:57:41811parcourir

Can System.Text.Json Achieve Selective Serialization Like Newtonsoft's IContractResolver?

System.Text.Json peut-il implémenter une sérialisation sélective comme IContractResolver ?

Le nouvel espace de noms System.Text.Json n'a pas d'équivalent exact à celui de Newtonsoft IContractRésolveur. Cependant, .NET 7 introduit la personnalisation des contrats, qui offre des fonctionnalités similaires.

Personnalisation des contrats dans .NET 7

La personnalisation des contrats permet aux utilisateurs de personnaliser les métadonnées de sérialisation JSON à l'aide de IJsonTypeInfoResolver. interface. En implémentant cette interface, les développeurs peuvent créer leurs propres résolveurs de contrat pour spécifier les propriétés à sérialiser.

Création d'un résolveur de contrat personnalisé

Pour créer un résolveur de contrat personnalisé qui sélectionne sérialise les champs, vous pouvez suivre ces étapes :

  1. Définir des méthodes d'extension fluides pour modifier le DefaultJsonTypeInfoResolver :

    public static DefaultJsonTypeInfoResolver SerializeSelectedFields(this DefaultJsonTypeInfoResolver resolver, IEnumerable<string> membersToSerialize);
  2. Définissez le TypeInfoResolver dans JsonSerializerOptions :

    var options = new JsonSerializerOptions
    {
        TypeInfoResolver = new DefaultJsonTypeInfoResolver()
            .SerializeSelectedFields("FirstName,Email,Id"),
        ...
    };

Exemple

Le code suivant montre comment sérialiser sélectivement le "FirstName", Propriétés « E-mail » et « Id » utilisant la personnalisation du contrat :

var options = new JsonSerializerOptions
{
    TypeInfoResolver = new DefaultJsonTypeInfoResolver()
        .SerializeSelectedFields("FirstName,Email,Id"),
    ...
};

// Serialize the object
var json = JsonSerializer.Serialize(obj, options);

Notes supplémentaires

  • Utilisez une logique de chaîne invariante en fonction des paramètres régionaux pour construire des métadonnées de sérialisation.
  • System.Text.Json est sensible à la casse par défaut, vous devrez donc peut-être faire correspondre les noms de propriétés en respectant la casse.

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