Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JSON properties now lower case on swap from ASP .Net Core 1.0.0-rc2-final to 1.0.0

MVC now serializes JSON with camel case names by default

Use this code to avoid camel case names by default

  services.AddMvc()
        .AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver());

Source: https://github.com/aspnet/Announcements/issues/194


In case you found this from Google and looking for a solution for Core 3.

Core 3 uses System.Text.Json, which by default does not preserve the case. As mentioned with this GitHub issue, setting the PropertyNamingPolicy to null will fix the problem.

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

and if you don't want to change the global settings, for one action only it's like this:

return Json(obj, new JsonSerializerOptions { PropertyNamingPolicy = null });

You can change the behavior like this:

services
    .AddMvc()
    .AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver());

See the announcement here: https://github.com/aspnet/Announcements/issues/194


For those who migrated to Core 3.1 and have Core MVC project can use following setup code in Startup.cs:


        public void ConfigureServices(IServiceCollection services)
        {
            ...
            services.AddControllersWithViews().AddJsonOptions(opts => opts.JsonSerializerOptions.PropertyNamingPolicy = null);
            ...
        }

For someone who does not want to set it globally, it is possible to use ContractResolver also to return as Json result:

public IActionResult MyMethod()
{
    var obj = new {myValue = 1};
    return Json(obj, new JsonSerializerSettings {ContractResolver = new DefaultContractResolver()});
}

This will fix it in dotnet core 3 webapi, so that it doesn't change your property names at all, and you return to your client exactly what you intended to.

In Startup.cs:

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

For some one who is using ASP.net WEB API ( rather than ASP.NET Core).

Add this line in your WebApiConfig.

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

jsonFormatter.SerializerSettings.ContractResolver = new DefaultContractResolver();

Adding this as an answer here because this comes up first in google search for web api as well.


Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!