1. ホーム
  2. c#

[解決済み] Web API 2: オブジェクトとそのサブオブジェクトのプロパティ名を camelCase した JSON を返す方法

2022-10-06 23:05:09

質問

アップデイト

すべての回答ありがとうございました。私は新しいプロジェクトに参加しており、最終的にこの問題の真相を突き止めたようです。実際、次のコードが原因だったようです。

public static HttpResponseMessage GetHttpSuccessResponse(object response, HttpStatusCode code = HttpStatusCode.OK)
{
    return new HttpResponseMessage()
    {
        StatusCode = code,
        Content = response != null ? new JsonContent(response) : null
    };
}

他の場所で...

public JsonContent(object obj)
{
    var encoded = JsonConvert.SerializeObject(obj, Newtonsoft.Json.Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore } );
    _value = JObject.Parse(encoded);

    Headers.ContentType = new MediaTypeHeaderValue("application/json");
}

無難に見えるJsonContentをWebAPIだと思い込んで見落としていましたが、そうではありませんでした。

これは、使用されている どこでも ... 最初に言っておきますが、これは何ですか? というか、「なぜこんなことをするのか」と言うべきでしょう。


元の質問は次のとおりです。

これは簡単なコンフィグ設定だと思ったのですが、あまりにも長い間、私を取り逃がしていました。

私はさまざまな解決策と答えを見ました。

https://gist.github.com/rdingwall/2012642

は、最新のWebAPIバージョンには適用されないようです...。

プロパティ名がPascalCasedのままなので、以下はうまくいかないようです。

var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;

json.UseDataContractJsonSerializer = true;
json.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;

json.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); 

マヤンクの回答はこちら CamelCase JSON WebAPIサブオブジェクト(ネストされたオブジェクト、子オブジェクト) は、満足できないが実行可能な答えのように思えたが、私たちが linq2sql を使用しているため、これらの属性を生成コードに追加しなければならないことに気づくまでは、そうではなかった...。

これを自動的に行う方法はありますか? この「厄介な」方法は、これまで長い間私を悩ませてきました。

どのように解決するのですか?

すべてを合わせると...

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