.NET Core Web API接受camelCase并输出snake_case

时间:2017-12-08 18:06:58

标签: .net json asp.net-mvc api .net-core

我有一个.NET Core Web API。开箱即用我明白,当你从端点获取数据时,它会为你提供camelCase JSON。我已决定使用ConfigureServices中的这段代码将此默认行为更改为蛇案例:

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
}

所以,问题是:有没有办法从API端点输出我的JSON作为snake_case,但是它还接受了POST身体和其他数据的camelCase?

1 个答案:

答案 0 :(得分:0)

根据this issue on GitHub

  

如果您需要创建非默认JsonInputFormatterJsonOutputFormatter实例,请使用JsonSerializerSettingsProvider(在RC2中)初始化JsonSerializerSettings实例并从中获取剩余的构造函数参数DI例如将参数添加到控制器构造函数。

来自同一问题的示例代码:

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 formattersadding your own formatter for input and output的更多信息,请访问MSDN。