116 votes

Les propriétés JSON sont désormais en minuscules lors du passage d'ASP .Net Core 1.0.0-rc2-final à 1.0.0

Je viens de faire passer notre projet d'ASP .Net Core 1.0.0-rc2-final à 1.0.0. Notre site web et notre client ont cessé de fonctionner à cause 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++){

parce que le contrôleur appelle maintenant le tableau "items" au lieu de "Items". Je n'ai fait aucun changement, si ce n'est installer les paquets mis à jour et modifier le fichier project.json. Je n'ai pas modifié les fichiers de modèle C# qui continuent à mettre en valeur leurs propriétés.

Pourquoi les contrôleurs ASP.Net Core ont-ils commencé à renvoyer du JSON avec des propriétés en minuscules ? Comment faire pour qu'ils respectent à nouveau la casse des noms de propriétés du modèle ?

0 votes

4 votes

Pour ceux d'entre vous qui cherchent la réponse pour .Net Core 3, vous devez faire défiler la page jusqu'au bas de la page.

4voto

RouterBox Points 51

Cela corrigera le problème dans le webapi dotnet core 3, de sorte qu'il ne change pas du tout les noms de vos propriétés, et que vous renvoyez à votre client exactement ce que vous aviez prévu.

Dans Startup.cs :

public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers().AddJsonOptions(options => options.JsonSerializerOptions.PropertyNamingPolicy = null);
        services.AddHttpClient();
    }

1voto

Abdul Rehman Sayed Points 4123

Pour ceux qui utilisent ASP.net WEB API (plutôt que ASP.NET Core).

Ajoutez cette ligne dans votre WebApiConfig.

//Comment this jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();

jsonFormatter.SerializerSettings.ContractResolver = new DefaultContractResolver();

J'ai ajouté cette réponse ici parce qu'elle apparaît en premier dans la recherche google pour l'api web aussi.

0voto

Asiri Jayaweera Points 169

Pour les versions Core 2.x, en utilisant ce code, vous pouvez éviter les noms en majuscules 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;
    }
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X