在中间件中序列化对JSON的响应的最佳方法是什么?

问题描述 投票:3回答:1

是否有规范的方法来利用ASP.NET中间件中配置的JsonOutputFormatter?或者,更一般地说,是否有更好的方法来序列化对JSON的响应,而不是在我的中间件中显式调用JsonConvert.SerializeObject

目前,我有以下代码:

public static void HandleHealthRequests(this IApplicationBuilder app)
{
    app.Map(new PathString("/health"), builder =>
    {
        builder.Run(async context =>
        {
            string response = JsonConvert.SerializeObject(new { DateTime.UtcNow, Version = _version });
            context.Response.StatusCode = StatusCodes.Status200OK;
            context.Response.ContentType = "application/json";
            context.Response.ContentLength = response.Length;
            await context.Response.WriteAsync(response);
        });
    });
}

这很好,但直接调用JsonConvert.SerializeObject并直接操纵Response感觉不对。

我看着解决JsonOutputFormatter直接利用它,但它需要一个OutputFormatterContext看起来太复杂,无法设置。另外,我也试过利用JsonOutputFormatter.SerializerSettings,但发现它是应用程序启动时的null所以我的代码在进程启动时抛出。

c# asp.net-core json.net asp.net-core-mvc
1个回答
2
投票

我有一个类似的问题,我只是想对我所有的json响应使用相同的配置,无论它们是在中间件或过滤器或控制器中......使用新版本的.net core(至少使用Microsoft.AspNetCore.Mvc.Formatters.Json 1.1.2)我使用格式化程序中的WriteObject(TextWriter writer, object value)方法,我在我的中间件或过滤器中使用依赖注入解析JsonOutputFormatter并使用该WriteObject方法进行序列化。

var stringWriter = new StringWriter(CultureInfo.InvariantCulture);
jsonOutputFormatter.WriteObject(stringWriter, value);
var responseBody = stringWriter.ToString();
© www.soinside.com 2019 - 2024. All rights reserved.