プログラムの事とか

お約束ですが「掲載内容は私個人の見解です」

ASP.NETのWeb APIが吐くJSONをlower camelケースにしたい

いつものことですがちゃんと確認していません。

ASP.NET MVC5(4?)での話です。

Web APIのGetとかはクラスをそのまま返せばあとはASP.NETが勝手にJSONにして返してくれますよね。

public class Person
{
    public string FirstName {get;set;}
    public string LastName {get;set;}
}

public class PersonController : ApiController
{
    public Person Get()
    {
        return new Person{FirstName="Hoge",LastName="hoge"};
    }
}

/api/person

{
"FirstName":"Hoge",
"LastName":"hoge"
}

非常に便利なんですがプロパティ名がUpper camelなのが気になりますね。JSONはLower camelが一般的っぽいですから。(ちなみに私はPascal case/Camel caseではなくUpper camel/Lower camelを好んで使っています)

クラスのプロパティをLower camelにすればいいのかもしれませんが、そうすると今度はR#先生が怒るのでこれは避けたいところです。

ということでおまじない

protected void Application_Start()
{
    // いろいろ

    GlobalConfiguration.Configuration
      .Formatters
      .JsonFormatter
      .SerializerSettings
      .ContractResolver = new CamelCasePropertyNamesContractResolver();
}

Webアプリの起動時(上の例ではGlobal.asax.cs)にこんな感じにしてあげるとJSON.NET君がLower camelでJSONを吐いてくれるようになります。

{
"firstName":"Hoge",
"lastName":"hoge"
}

ちなみに実際に動かして確認していないので事実と異なるところがあるかもしれませんが、おまじないの部分はStack Overの回答をコピペしたので間違いないと思います

おしまい