[ASP.NET MVC] Controller から Json を Camel Case でシリアライズして返す
public class User { public string Id { get; set; } public string Name { get; set; } } public class DefaultController : Controller { [HttpGet] public ActionResult GetPerson() { IEnumerable<User> users; // DB からとってきたりする return Json(users.ToArray(), JsonRequestBehavior.AllowGet); } }
このとき、Response の Json のプロパティ名はクラスのプロパティ名が引き継がれるので Pascal Case になってしまう。
[ { Id = 'hoge', Name = 'fuga' }, ... ]
JavaScript 側では Camel Case で処理したいことが多いのでイマイチだ。 簡単な方法は 2 つある。まずは匿名オブジェクトに変換してから返すというもの。
var json = Json(users.Select(x => new { id = x.Id, name = x.Name }).ToArray(), JsonRequestBehavior.AllowGet); return json;
もう一つは JsonConvert を使うというもの。
var jsonSerializerSetting = new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }); var json = JsonCovert.SerializeObject(users.ToArray(), jsonSerializerSetting) return json;
ちなみに、 ApiController なら Web アプリ単位で設定を持てるらしい (Application_Start() で指定する)。