Maison > développement back-end > C++ > Comment remplacer l'attribut JsonProperty lors de la sérialisation JSON avec Json.NET ?

Comment remplacer l'attribut JsonProperty lors de la sérialisation JSON avec Json.NET ?

Linda Hamilton
Libérer: 2025-01-07 16:06:44
original
759 Les gens l'ont consulté

How to Override the JsonProperty Attribute During JSON Serialization with Json.NET?

Remplacement de JsonPropertyAttribute

lors de l'utilisation de Json.NET pour la sérialisation JSON

Dans le scénario de sérialisation JSON utilisant ASP.Net MVC et Json.Net, il est très efficace d'utiliser l'attribut [JsonProperty(PropertyName = "shortName")] pour optimiser la taille de la charge utile. Cette approche est utile lorsque le récepteur est une autre application ou service .Net, car la désérialisation réassemble la hiérarchie d'objets en utilisant les noms de propriété d'origine tout en minimisant la taille de la charge utile.

Cependant, des problèmes surviennent lorsque le client est une application JavaScript ou Ajax accessible via un navigateur. Le client reçoit du JSON avec des noms de propriétés raccourcis, ce qui empêche une utilisation optimale. Cet article explique comment contourner par programme l'attribut [JsonProperty(PropertyName = "shortName")] lors de la sérialisation JSON.

À cette fin, utiliser un analyseur de contrat personnalisé est la meilleure solution. Voici la mise en œuvre :

public class LongNameContractResolver : DefaultContractResolver
{
    protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
    {
        // 使用基类生成具有简短名称的JsonProperty
        IList<JsonProperty> properties = base.CreateProperties(type, memberSerialization);

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

        return properties;
    }
}
Copier après la connexion

En intégrant un analyseur personnalisé, vous pouvez facilement contrôler le comportement de sérialisation. Son efficacité est la suivante :

public class Program
{
    public static void Main(string[] args)
    {
        Foo foo = new Foo
        {
            CustomerName = "Bubba Gump Shrimp Company",
            CustomerNumber = "BG60938"
        };

        Console.WriteLine("--- 使用JsonProperty名称 ---");
        Console.WriteLine(Serialize(foo, false));
        Console.WriteLine();
        Console.WriteLine("--- 忽略JsonProperty名称 ---");
        Console.WriteLine(Serialize(foo, true));
    }

    public static string Serialize(object obj, bool useLongNames)
    {
        JsonSerializerSettings settings = new JsonSerializerSettings();
        settings.Formatting = Formatting.Indented;
        if (useLongNames)
        {
            settings.ContractResolver = new LongNameContractResolver();
        }

        return JsonConvert.SerializeObject(obj, settings);
    }
}
Copier après la connexion

Sortie :

--- 使用JsonProperty名称 ---
{
  "cust-num": "BG60938",
  "cust-name": "Bubba Gump Shrimp Company"
}

--- 忽略JsonProperty名称 ---
{
  "CustomerNumber": "BG60938",
  "CustomerName": "Bubba Gump Shrimp Company"
}
Copier après la connexion

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