Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
À compter de .NET 5, les applications ASP.NET Core utilisent les options de désérialisation par défaut, comme spécifié par JsonSerializerDefaults.Web. L’ensemble d’options Web inclut le paramètre NumberHandling sur JsonNumberHandling.AllowReadingFromString. Les modifications permettent aux applications ASP.NET Core de désérialiser correctement les nombres représentés sous forme de chaînes JSON au lieu de lever une exception.
Description de la modification
Dans .NET Core 3.0 - 3.1, JsonSerializer lève une JsonException pendant la désérialisation s’il rencontre un nombre entre guillemets dans une charge utile JSON. Les nombres entre guillemets sont utilisés pour mapper avec les propriétés numériques dans les graphiques d’objets. Dans .NET Core 3.0 - 3.1, les nombres sont lus uniquement à partir de JsonTokenType.Number jetons.
À compter de .NET 5, les nombres entre guillemets dans les charges utiles JSON sont considérés comme valides, par défaut, pour les applications ASP.NET Core. Aucune exception n’est levée lors de la désérialisation des nombres entre guillemets.
Conseil / Astuce
- Il n’existe aucune modification de comportement pour la valeur par défaut, autonome JsonSerializer ou JsonSerializerOptions.
- Cela n’est techniquement pas un changement cassant, car il rend un scénario plus permissif au lieu d’être plus restrictif (autrement dit, il réussit à contraindre un nombre à partir d’une chaîne JSON au lieu de lever une exception). Toutefois, étant donné qu’il s’agit d’un changement comportemental important qui affecte de nombreuses applications ASP.NET Core, il est documenté ici.
- Les méthodes d’extension HttpClientJsonExtensions.GetFromJsonAsync et HttpContentJsonExtensions.ReadFromJsonAsync utilisent également l’ensemble d’options de sérialisation Web.
Version introduite
5,0
Raison de la modification
Plusieurs utilisateurs ont demandé une option pour une gestion des nombres permissive dans JsonSerializer. Ces commentaires indiquent que de nombreux producteurs JSON (par exemple, des services sur le web) émettent des nombres entre guillemets. En autorisant la lecture de nombres entre guillemets (désérialisés), les applications .NET peuvent analyser correctement ces charges utiles, par défaut, dans les contextes web. La configuration est exposée par le biais JsonSerializerDefaults.Web de sorte que vous puissiez spécifier les mêmes options entre différentes couches d’application, par exemple, client, serveur et partagé.
Action recommandée
Si cette modification est perturbatrice, par exemple, si vous dépendez de la gestion stricte des nombres pour la validation, vous pouvez réactiver le comportement précédent. Définissez l’option JsonSerializerOptions.NumberHandling sur JsonNumberHandling.Strict.
Pour les applications ASP.NET Core MVC et API web, vous pouvez configurer l’option dans Startup en utilisant le code suivant :
services.AddControllers()
.AddJsonOptions(options => options.JsonSerializerOptions.NumberHandling = JsonNumberHandling.Strict);