2017-12-08 9 views
2

私は.NET Core Web APIを持っています。あなたが作ったエンドポイントからデータを取り戻すときには、私はそれがcamelCase JSONを提供することを理解しています。私は自分のConfigureServicesにコードのこのビットを持つ蛇のケースのように、このデフォルトの動作を変更することを決定しました:.NET Core Web APIはcamelCaseを受け入れ、snake_caseを出力します

services.AddMvc().AddJsonOptions(options => 
{ 
    options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore; 
    options.SerializerSettings.ContractResolver = new DefaultContractResolver() 
    { 
     NamingStrategy = new SnakeCaseNamingStrategy() 
    }; 
}); 

これがうまく機能し、私はエンドポイントからのデータを要求したときsnake_caseに私にJSONを与えます。しかし、今私はPOST要求のcamelCase JSONを与えるとき、それは動作しません。私はJavaScriptのcamelCaseをフロントエンドに保つのが好きなので、データを送信するときにはcamelCaseを使用することをおすすめします。

obj: { 
    some_key: "value" // works 
    someKey: "value" // doesn't work 
} 

だから、質問は:snake_caseとしてAPIエンドポイントからの出力の私のJSONをする方法はありますが、またそれがためにキャメルケースを受け入れる必要があり、私はデータを送信する場合たとえば、私は、このようにそれを行う必要がありますPOSTボディとその他のデータ? this issue on GitHubによると

答えて

0

デフォルト以外のJsonInputFormatterまたはJsonOutputFormatterインスタンスを作成する必要がある場合は、JsonSerializerSettingsインスタンスを初期化し、DIなどから、残りのコンストラクタのパラメータを取得する(RC2で)JsonSerializerSettingsProviderを使用コントローラコンストラクタにパラメータを追加する。

同じ問題からサンプルコード:

options.OutputFormatters.RemoveType<JsonOutputFormatter>(); 
options.InputFormatters.RemoveType<JsonInputFormatter>(); 
options.InputFormatters.RemoveType<JsonPatchInputFormatter>(); 

var outputSettings = JsonSerializerSettingsProvider.CreateSerializerSettings(); 
options.OutputFormatters.Add(new JsonOutputFormatter(outputSettings, _charPool)); 

var inputSettings = JsonSerializerSettingsProvider.CreateSerializerSettings(); 
var jsonInputLogger = _loggerFactory.CreateLogger<JsonInputFormatter>(); 
options.InputFormatters.Add(new JsonInputFormatter(
    jsonInputLogger, 
    inputSettings, 
    _charPool, 
    _objectPoolProvider)); 

var jsonInputPatchLogger = _loggerFactory.CreateLogger<JsonPatchInputFormatter>(); 
options.InputFormatters.Add(new JsonPatchInputFormatter(
    jsonInputPatchLogger, 
    inputSettings, 
    _charPool, 
    _objectPoolProvider)); 

だから私はあなたが基本的にあなたのニーズに合わせて、このコードを調整する必要があると思います。 configuring the formattersまたはadding your own formatter for input and outputについての詳細は、MSDNにあります。

関連する問題