gpt4 book ai didi

c# - Controller 级别的 ASP.NET Core 3.1 中 JsonOutputFormatter 的替代方案

转载 作者:行者123 更新时间:2023-12-03 22:53:16 27 4
gpt4 key购买 nike

我有一个从 this answer 改编的自定义过滤器属性,目前为 .NET Core 2.2 实现,我想适应 3.1。它引用了 Newtonsoft.JSON,出于兼容性原因,我更愿意保持这种方式。

代码如下:

public class AllPropertiesAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext ctx)
{
if (!(ctx.Result is ObjectResult objectResult)) return;

var serializer = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Include };
serializer.Converters.Add(new StringEnumConverter());

var formatter = new JsonOutputFormatter(serializer,
ctx.HttpContext.RequestServices.GetRequiredService<ArrayPool<char>>());

objectResult.Formatters.Add(formatter);
}
}
JsonOutputFormatter 仅支持到 .net core 2.2, according to the official documentation ;我应该如何继续在 3.1 下保持相同的行为?

最佳答案

Microsoft.AspNetCore.Mvc.NewtonsoftJson 包中的 NewtonsoftJsonOutputFormatter 相当于旧的 JsonOutputFormatter。它有一个小的变化,它也将在构造函数中接受一个 MvcOptions:

    public NewtonsoftJsonOutputFormatter(
JsonSerializerSettings serializerSettings,
ArrayPool<char> charPool,
MvcOptions mvcOptions)

这只是通过 SuppressOutputFormatterBuffering 选项真正影响行为。您也许可以从 RequestServices 解决它,或者您可以即时创建一个新的。

关于c# - Controller 级别的 ASP.NET Core 3.1 中 JsonOutputFormatter 的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59634633/

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