Json – Force lowercase property names from Json() in ASP.NET MVC

asp.net-mvcjson

Given the following class,

public class Result
{      
    public bool Success { get; set; }

    public string Message { get; set; }
}

I am returning one of these in a Controller action like so,

return Json(new Result() { Success = true, Message = "test"})

However my client side framework expects these properties to be lowercase success and message. Without actually having to have lowercase property names is that a way to acheive this thought the normal Json function call?

Best Answer

The way to achieve this is to implement a custom JsonResult like here: Creating a custom ValueType and Serialising with a custom JsonResult (original link dead).

And use an alternative serialiser such as JSON.NET, which supports this sort of behaviour, e.g.:

Product product = new Product
{
  ExpiryDate = new DateTime(2010, 12, 20, 18, 1, 0, DateTimeKind.Utc),
  Name = "Widget",
  Price = 9.99m,
  Sizes = new[] {"Small", "Medium", "Large"}
};

string json = 
  JsonConvert.SerializeObject(
    product,
    Formatting.Indented,
    new JsonSerializerSettings 
    { 
      ContractResolver = new CamelCasePropertyNamesContractResolver() 
    }
);

Results in

{
  "name": "Widget",
  "expiryDate": "\/Date(1292868060000)\/",
  "price": 9.99,
  "sizes": [
    "Small",
    "Medium",
    "Large"
  ]
}