Web API serialize properties starting from lowercase letter

34,016

Solution 1

If you want to change serialization behavior in Newtonsoft.Json aka JSON.NET, you need to create your settings:

var jsonSerializer = JsonSerializer.Create(new JsonSerializerSettings 
{ 
    ContractResolver = new CamelCasePropertyNamesContractResolver(),
    NullValueHandling = NullValueHandling.Ignore // ignore null values
});

You can also pass these settings into JsonConvert.SerializeObject:

JsonConvert.SerializeObject(objectToSerialize, serializerSettings);

For ASP.NET MVC and Web API. In Global.asax:

protected void Application_Start()
{
   GlobalConfiguration.Configuration
      .Formatters
      .JsonFormatter
      .SerializerSettings
      .ContractResolver = new CamelCasePropertyNamesContractResolver();
}

Exclude null values:

GlobalConfiguration.Configuration
    .Formatters
    .JsonFormatter
    .SerializerSettings
    .NullValueHandling = NullValueHandling.Ignore;

Indicates that null values should not be included in resulting JSON.

ASP.NET Core

ASP.NET Core by default serializes values in camelCase format.

Solution 2

For MVC 6.0.0-rc1-final

Edit Startup.cs, In the ConfigureServices(IserviceCollection), modify services.AddMvc();

services.AddMvc(options =>
{
    var formatter = new JsonOutputFormatter
    {
        SerializerSettings = {ContractResolver = new CamelCasePropertyNamesContractResolver()}
    };
    options.OutputFormatters.Insert(0, formatter);
});

Solution 3

ASP.NET CORE 1.0.0 Json serializes have default camelCase. Referee this Announcement

Solution 4

If you want to do this in the newer (vNext) C# 6.0, then you have to configure this through MvcOptions in the ConfigureServices method located in the Startup.cs class file.

services.AddMvc().Configure<MvcOptions>(options =>
{
    var jsonOutputFormatter = new JsonOutputFormatter();
    jsonOutputFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
    jsonOutputFormatter.SerializerSettings.DefaultValueHandling = Newtonsoft.Json.DefaultValueHandling.Ignore;

    options.OutputFormatters.Insert(0, jsonOutputFormatter);
});
Share:
34,016
Andrei
Author by

Andrei

There are 2 hard problems in computer science: cache invalidation, naming things, and off-by-1 errors. .NET, Azure, ASP.NET MVC, JavaScript, React-Native

Updated on July 09, 2022

Comments

  • Andrei
    Andrei almost 2 years

    How can I configure serialization of my Web API to use camelCase (starting from lowercase letter) property names instead of PascalCase like it is in C#.

    Can I do it globally for the whole project?

  • fiat
    fiat over 8 years
    mvc6 snippet doesn't work for me on beta6? My IActionsResult method returns Json(listItems) with PascalCase
  • Chris Woolum
    Chris Woolum over 8 years
    for beta6, you need services.AddMvc().Configure<MvcOptions>(options => { var formatter = options.OutputFormatters.FirstOrDefault(f => f is JsonOutputFormatter) as JsonOutputFormatter; formatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); formatter.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; });
  • juan carlos peña cabrera
    juan carlos peña cabrera about 2 years
    so what is the solution to change from { MyProp: ''} to { myProp: ''}