Je viens de remplacer notre projet ASP .Net Core 1.0.0-rc2-final par 1.0.0. Notre site Web et notre client ont cessé de fonctionner en raison de la capitalisation des propriétés JSON. Par exemple, cette ligne de JavaScript échoue maintenant
for (var i = 0; i < collection.Items.length; i++){
car le contrôleur appelle maintenant le tableau "items" au lieu de "Items". Je n'ai apporté aucune modification au-delà de l'installation des packages mis à jour et de la modification du fichier project.json. Je n'ai pas changé les fichiers de modèle C # qui capitalisent toujours leurs propriétés.
Pourquoi les contrôleurs ASP.Net Core ont-ils commencé à renvoyer JSON avec des propriétés minuscules? Comment puis-je revenir à eux en respectant la casse des noms de propriété du modèle?
c#
asp.net-core
asp.net-core-1.0
dumbledad
la source
la source
Réponses:
MVC sérialise désormais JSON avec des noms de cas de chameau par défaut
Utilisez ce code pour éviter les noms de cas de chameau par défaut
services.AddMvc() .AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver());
Source: https://github.com/aspnet/Announcements/issues/194
la source
Json()
appel?Au cas où vous auriez trouvé cela de Google et que vous recherchiez une solution pour Core 3.
Core 3 utilise
System.Text.Json
, qui par défaut ne préserve pas la casse. Comme mentionné avec ce problème GitHub , définir lePropertyNamingPolicy
sur null résoudra le problème.public void ConfigureServices(IServiceCollection services) { ... services.AddControllers() .AddJsonOptions(opts => opts.JsonSerializerOptions.PropertyNamingPolicy = null);
et si vous ne voulez pas modifier les paramètres globaux, pour une seule action, c'est comme ça:
return Json(obj, new JsonSerializerOptions { PropertyNamingPolicy = null });
la source
Vous pouvez changer le comportement comme ceci:
services .AddMvc() .AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver());
Voir l'annonce ici: https://github.com/aspnet/Announcements/issues/194
la source
Pour ceux qui ont migré vers Core 3.1 et ont un projet Core MVC, vous pouvez utiliser le code d'installation suivant dans Startup.cs:
public void ConfigureServices(IServiceCollection services) { ... services.AddControllersWithViews().AddJsonOptions(opts => opts.JsonSerializerOptions.PropertyNamingPolicy = null); ... }
la source
Cela le corrigera dans dotnet core 3 webapi, afin qu'il ne change pas du tout les noms de vos propriétés et que vous retourniez à votre client exactement ce que vous vouliez.
Dans Startup.cs:
public void ConfigureServices(IServiceCollection services) { services.AddControllers().AddJsonOptions(options => options.JsonSerializerOptions.PropertyNamingPolicy = null); services.AddHttpClient(); }
la source
Pour quelqu'un qui utilise l'API WEB ASP.net (plutôt que ASP.NET Core).
Ajoutez cette ligne dans votre WebApiConfig.
//Comment this jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); jsonFormatter.SerializerSettings.ContractResolver = new DefaultContractResolver();
L'ajout de ceci comme réponse ici, car cela apparaît également en premier dans la recherche Google pour l'API Web.
la source
Pour les versions Core 2.x, en utilisant ce code, vous pouvez éviter les noms de cas de camel par défaut. Vous devez ajouter le code suivant dans la méthode ConfigureServices du fichier Startup.cs.
services.AddMvc() .AddJsonOptions(o => { if (o.SerializerSettings.ContractResolver != null) { var castedResolver = o.SerializerSettings.ContractResolver as DefaultContractResolver; castedResolver.NamingStrategy = null; } });
la source