gpt4 book ai didi

c# - 在 ASP.NET Core 3.1 中使用带有 HttpContext.Response 的新 Json 序列化器

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

当我们想在 ASP.NET Core 的管道中将对象序列化为 JSON 字符串时,我们需要使用 HttpContext.Response.Body.WriteAsync ,除非我遗漏了什么,因为没有 Result我们可以轻松地使用它来分配 JsonResult 的属性反对。

除非有更好的替代方案,否则使用上述方法究竟是如何实现序列化的?

注: JSON 序列化程序的选项应与 ASP.NET Core 3.1 中使用的(默认)选项相同。

如果需要(不是在我们的情况下),可以通过 IServiceCollection.AddJsonOptions 修改它们。中间件。

例子:

app.Use( next =>
{
return async context =>
{
if (<someFunkyConditionalExample>)
{
// serialize a JSON object as the response's content, returned to the end-user.
// this should use ASP.NET Core 3.1's defaults for JSON Serialization.
}
else
{
await next(context);
}
};
});

最佳答案

首先,您可以使用 these extension methods将字符串直接写入您的响应,例如:

await context.Response.WriteAsync("some text");

确保您已导入正确的命名空间,以便您可以访问这些扩展:
using Microsoft.AspNetCore.Http;

其次,如果您想获取框架正在使用的 JSON 序列化器设置,您可以从 DI 容器中提取它们:
var jsonOptions = context.RequestServices.GetService<IOptions<JsonOptions>>();

因此,这将使您的完整管道代码看起来像这样:
app.Use(next =>
{
return async context =>
{
if (<someFunkyConditionalExample>)
{
// Get the options
var jsonOptions = context.RequestServices.GetService<IOptions<JsonOptions>>();

// Serialise using the settings provided
var json = JsonSerializer.Serialize(
new {Foo = "bar"}, // Switch this with your object
jsonOptions?.Value.JsonSerializerOptions);

// Write to the response
await context.Response.WriteAsync(json);
}
else
{
await next(context);
}
};
});

关于c# - 在 ASP.NET Core 3.1 中使用带有 HttpContext.Response 的新 Json 序列化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60707421/

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