gpt4 book ai didi

json - .Net Core Web API 每个 Controller 有不同的 JSON 大小写

转载 作者:行者123 更新时间:2023-12-03 01:32:20 32 4
gpt4 key购买 nike

我们正在尝试将旧 API 迁移到当前的 .Net Core Web API 中。我们当前的 API 使用camelCasing 返回 JSON,但我们旧的 API 使用 PascalCasing,我们不想更新客户端。

有什么方法可以指定我们想要每个 Controller 使用哪种序列化策略,而不是整个服务的全局序列化策略?

最佳答案

是的,您可以通过使用 Controller 上的属性来实现它。请参阅下面的示例:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class CustomJsonFormatter : ActionFilterAttribute
{
private readonly string formatName = string.Empty;
public CustomJsonFormatter(string _formatName)
{
formatName = _formatName;
}

public override void OnActionExecuted(ActionExecutedContext context)
{
if (context == null || context.Result == null)
{
return;
}

var settings = JsonSerializerSettingsProvider.CreateSerializerSettings();

if (formatName == "camel")
{
settings.ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver();
}
else
{
settings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver();
}

var formatter = new JsonOutputFormatter(settings, ArrayPool<Char>.Shared);

(context.Result as Microsoft.AspNetCore.Mvc.OkObjectResult).Formatters.Add(formatter);
}
}

这是您的 Controller :

[CustomJsonFormatter("camel")]
[Route("api/[controller]")]
public class ValuesController : Controller
{
// GET: api/values
[HttpGet]
public IActionResult Get()
{
Car car = new Car { Color = "red", Make = "Nissan" };

return Ok(car);
}
}

关于json - .Net Core Web API 每个 Controller 有不同的 JSON 大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43506257/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com