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>
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>
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>
Sortie :
<code>--- 使用JsonProperty名称 --- { "cust-num": "BG60938", "cust-name": "Bubba Gump Shrimp Company" } --- 忽略JsonProperty名称 --- { "CustomerNumber": "BG60938", "CustomerName": "Bubba Gump Shrimp Company" }</code>
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!