我有一个.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?
答案 0 :(得分:0)
如果您需要创建非默认
JsonInputFormatter
或JsonOutputFormatter
实例,请使用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 formatters或adding your own formatter for input and output的更多信息,请访问MSDN。