【问题标题】:.NET Core web API accept camelCase and output snake_case.NET Core Web API 接受 camelCase 并输出 snake_case
【发布时间】:2018-05-23 00:42:18
【问题描述】:

我有一个 .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
}

那么,问题来了:有没有办法将我的 JSON 从 API 端点输出为snake_case,但也让它接受 POST 正文和其他数据的 camelCase?

【问题讨论】:

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


    【解决方案1】:

    根据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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-09
      • 1970-01-01
      • 1970-01-01
      • 2019-05-18
      • 2020-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多