How can I return camelCase JSON serialized by JSON.NET from ASP.NET MVC controller methods? How can I return camelCase JSON serialized by JSON.NET from ASP.NET MVC controller methods? json json

How can I return camelCase JSON serialized by JSON.NET from ASP.NET MVC controller methods?


or, simply put:

JsonConvert.SerializeObject(    <YOUR OBJECT>,     new JsonSerializerSettings     {         ContractResolver = new CamelCasePropertyNamesContractResolver()     });

For instance:

return new ContentResult{    ContentType = "application/json",    Content = JsonConvert.SerializeObject(new { content = result, rows = dto }, new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }),    ContentEncoding = Encoding.UTF8};


I found an excellent solution to this problem on Mats Karlsson's blog. The solution is to write a subclass of ActionResult that serializes data via JSON.NET, configuring the latter to follow the camelCase convention:

public class JsonCamelCaseResult : ActionResult{    public JsonCamelCaseResult(object data, JsonRequestBehavior jsonRequestBehavior)    {        Data = data;        JsonRequestBehavior = jsonRequestBehavior;    }    public Encoding ContentEncoding { get; set; }    public string ContentType { get; set; }    public object Data { get; set; }    public JsonRequestBehavior JsonRequestBehavior { get; set; }    public override void ExecuteResult(ControllerContext context)    {        if (context == null)        {            throw new ArgumentNullException("context");        }        if (JsonRequestBehavior == JsonRequestBehavior.DenyGet && String.Equals(context.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase))        {            throw new InvalidOperationException("This request has been blocked because sensitive information could be disclosed to third party web sites when this is used in a GET request. To allow GET requests, set JsonRequestBehavior to AllowGet.");        }        var response = context.HttpContext.Response;        response.ContentType = !String.IsNullOrEmpty(ContentType) ? ContentType : "application/json";        if (ContentEncoding != null)        {            response.ContentEncoding = ContentEncoding;        }        if (Data == null)            return;        var jsonSerializerSettings = new JsonSerializerSettings        {            ContractResolver = new CamelCasePropertyNamesContractResolver()        };        response.Write(JsonConvert.SerializeObject(Data, jsonSerializerSettings));    }}

Then use this class as follows in your MVC controller method:

public ActionResult GetPerson(){    return new JsonCamelCaseResult(new Person { FirstName = "Joe", LastName = "Public" }, JsonRequestBehavior.AllowGet)};}


For WebAPI, check out this link: http://odetocode.com/blogs/scott/archive/2013/03/25/asp-net-webapi-tip-3-camelcasing-json.aspx

Basically, add this code to your Application_Start:

var formatters = GlobalConfiguration.Configuration.Formatters;var jsonFormatter = formatters.JsonFormatter;var settings = jsonFormatter.SerializerSettings;settings.ContractResolver = new CamelCasePropertyNamesContractResolver();