Maison > développement back-end > C++ > Comment ignorer sélectivement les attributs JsonProperty lors de la sérialisation JSON ?

Comment ignorer sélectivement les attributs JsonProperty lors de la sérialisation JSON ?

Mary-Kate Olsen
Libérer: 2025-01-07 16:01:40
original
721 Les gens l'ont consulté

How to Selectively Ignore JsonProperty Attributes During JSON Serialization?

Ignorer la propriété JsonProperty(PropertyName = "someName") pendant la sérialisation JSON

Json.Net fournit la propriété JsonProperty pour personnaliser le processus de sérialisation, permettant aux développeurs de spécifier les noms de propriétés lors de la sérialisation. Cependant, dans certains cas (par exemple lorsque le client est un navigateur), l'utilisation de noms de propriété plus courts pour réduire la charge peut entraîner des problèmes lors de l'utilisation de noms plus courts dans le code client.

Pour contourner ce problème, vous pouvez utiliser un analyseur de contrat personnalisé pour ignorer sélectivement les propriétés JsonProperty. Voici comment procéder :

public class LongNameContractResolver : DefaultContractResolver
{
    protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
    {
        // 使用简短名称获取默认属性
        IList<JsonProperty> properties = base.CreateProperties(type, memberSerialization);

        // 将简短名称替换为原始属性名称
        foreach (var property in properties)
        {
            property.PropertyName = property.UnderlyingName;
        }

        return properties;
    }
}
Copier après la connexion

Cet analyseur remplace la méthode CreateProperties, qui crée d'abord une liste de propriétés en utilisant des noms plus courts spécifiés par la propriété JsonProperty. Il parcourt ensuite chaque propriété et remplace le nom le plus court par le nom de la propriété sous-jacente.

Pour utiliser cet analyseur, définissez-le comme analyseur de contrat de JsonSerializerSettings :

JsonSerializerSettings settings = new JsonSerializerSettings();
settings.ContractResolver = new LongNameContractResolver();
Copier après la connexion

Vous pouvez ensuite ignorer sélectivement la propriété JsonProperty lors de la sérialisation à l'aide de paramètres personnalisés :

// 如果 useLongNames 为 true,则忽略 JsonProperty 属性
if (useLongNames)
{
    settings.ContractResolver = new LongNameContractResolver();
}
Copier après la connexion

Cette solution vous permet de contrôler par programme quand les propriétés JsonProperty sont ignorées, vous permettant d'obtenir le comportement de sérialisation souhaité en fonction du type de client ou de conditions spécifiques.

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal