Maison > développement back-end > C++ > Comment remplacer sélectivement les attributs JsonProperty pour la sérialisation JSON personnalisée dans ASP.NET MVC ?

Comment remplacer sélectivement les attributs JsonProperty pour la sérialisation JSON personnalisée dans ASP.NET MVC ?

Linda Hamilton
Libérer: 2025-01-07 15:52:40
original
662 Les gens l'ont consulté

How to Selectively Override JsonProperty Attributes for Customized JSON Serialization in ASP.NET MVC?

Contrôlez de manière flexible les attributs JsonProperty pour implémenter la sérialisation JSON personnalisée ASP.NET MVC

Dans les applications ASP.NET MVC utilisant Json.Net, les développeurs utilisent souvent l'attribut [JsonProperty(PropertyName = "shortName")] pour réduire la quantité de données lors de la sérialisation JSON. Cette approche fonctionne bien pour les clients .NET, mais les clients basés sur un navigateur rencontreront des problèmes lors de l'utilisation de noms de propriété abrégés.

Pour résoudre ce problème, vous pouvez utiliser un analyseur de contrat personnalisé pour ignorer dynamiquement l'attribut [JsonProperty()] lors de la sérialisation. Voici comment procéder :

Analyseur de contrat personnalisé

<code class="language-csharp">class LongNameContractResolver : DefaultContractResolver
{
    protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
    {
        var list = base.CreateProperties(type, memberSerialization);

        foreach (JsonProperty prop in list)
        {
            prop.PropertyName = prop.UnderlyingName;
        }

        return list;
    }
}</code>
Copier après la connexion

Activer la suppression des attributs

Pour ignorer sélectivement l'attribut [JsonProperty()] pendant la sérialisation, vous pouvez définir conditionnellement l'attribut JsonSerializerSettings de ContractResolver. Un exemple est le suivant :

<code class="language-csharp">JsonSerializerSettings settings = new JsonSerializerSettings
{
    Formatting = Formatting.Indented
};

if (useLongNames)
{
    settings.ContractResolver = new LongNameContractResolver();
}

string jsonString = JsonConvert.SerializeObject(obj, settings);</code>
Copier après la connexion

En définissant l'indicateur useLongNames, vous pouvez contrôler si l'attribut [JsonProperty()] est ignoré et si des noms d'attribut plus longs sont utilisés pour la sérialisation. Cela fournit un contrôle précis sur la sortie JSON en fonction des besoins spécifiques du client.

Exemple de sortie

Considérons l'exemple suivant :

<code class="language-csharp">Foo foo = new Foo
{
    CustomerNumber = "BG60938",
    CustomerName = "Bubba Gump Shrimp Company"
};

Console.WriteLine("--- 使用JsonProperty名称 ---");
Console.WriteLine(Serialize(foo, false));
Console.WriteLine();
Console.WriteLine("--- 忽略JsonProperty名称 ---");
Console.WriteLine(Serialize(foo, true));</code>
Copier après la connexion

Sortie :

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

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

En remplaçant dynamiquement l'attribut [JsonProperty()], vous pouvez personnaliser le processus de sérialisation JSON pour optimiser la quantité de données pour un client spécifique tout en conservant une hiérarchie d'objets cohérente pour les autres clients.

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!

source:php.cn
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