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
Linda Hamiltonoriginal
2025-01-07 16:06:44711parcourir

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 :

<code class="language-csharp">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;
    }
}</code>

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

<code class="language-csharp">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);
    }
}</code>

Sortie :

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

--- 忽略JsonProperty名称 ---
{
  "CustomerNumber": "BG60938",
  "CustomerName": "Bubba Gump Shrimp Company"
}</code>

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