web-dev-qa-db-ja.com

Web APIは小文字から始まるプロパティをシリアル化します

C#のようにcamelCaseの代わりにPascalCase(小文字から始まる)プロパティ名を使用するようにWeb APIのシリアル化を構成するにはどうすればよいですか。

プロジェクト全体でグローバルに行うことはできますか?

52
Andrei

Newtonsoft.Jsonまたは別名JSON.NETのシリアル化動作を変更する場合は、設定を作成する必要があります。

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

これらの設定をJsonConvert.SerializeObjectに渡すこともできます。

JsonConvert.SerializeObject(objectToSerialize, serializerSettings);

ASP.NET MVCおよびWeb API用。 Global.asaxの場合:

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

Null値を除外する:

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

結果のJSONにnull値を含めないことを示します。

ASP.NETコア

ASP.NET Coreは、デフォルトでキャメルケース形式で値をシリアル化します。

88
Andrei

MVC 6.0.0-rc1-finalの場合

編集Startup.csConfigureServices(IserviceCollection)で、services.AddMvc();を変更します

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

ASP.NET CORE 1.0.0 Jsonのシリアル化にはデフォルトのキャメルケースがあります。 この発表を参照

2
Ghanshyam Joshi

新しい(vNext)C#6.0でこれを行う場合は、Startup.csクラスファイルにあるMvcOptionsメソッドのConfigureServicesを使用してこれを構成する必要があります。

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);
});
1
Vivendi