C# 从ASP.NET Web Api中的中间件访问JsonOptions

C# 从ASP.NET Web Api中的中间件访问JsonOptions,c#,json,.net,asp.net-web-api,serialization,C#,Json,.net,Asp.net Web Api,Serialization,在ASP.NET Web API项目中,我有一个自定义json转换器。它在使用典型API控制器方法的场景中工作得非常好。但不知何故,我无法从标准WebAPI管道之外的中间件访问配置好的JsonOptions 重现问题的简单中间件: 公共密封类测试中间件 { 公共异步任务调用(HttpContext HttpContext、IOptions jsonOptions) { //必须应用一些逻辑来检查中间件 // ... //回复 等待httpContext.Response.WriteAsJsonA

在ASP.NET Web API项目中,我有一个自定义json转换器。它在使用典型API控制器方法的场景中工作得非常好。但不知何故,我无法从标准WebAPI管道之外的中间件访问配置好的JsonOptions

重现问题的简单中间件:

公共密封类测试中间件
{
公共异步任务调用(HttpContext HttpContext、IOptions jsonOptions)
{
//必须应用一些逻辑来检查中间件
// ...
//回复
等待httpContext.Response.WriteAsJsonAsync(数据,jsonOptions.Value.SerializerOptions);
}
}
以及配置片段:

public void配置服务(IServiceCollection服务)
{
服务
.AddControllers()
.AddJsonOptions(配置=>
{
configure.JsonSerializerOptions.Converters.Add(新的MyCustomConverter());
configure.JsonSerializerOptions.IgnoreNullValues=true;
});
}
public void配置(IApplicationBuilder应用程序、IWebHostEnvironment环境)
{
app.UseHttpsRedirection();
app.UseMiddleware();
app.UseRouting();
app.UseEndpoints(端点=>{endpoints.mapController();});
}
当http请求命中中间件时,
IOptions jsonOptions
有一个SerializerOptions对象,该对象不包含我在配置中设置的转换器


有没有办法通过正确配置的序列化来访问实际的JsonOptions?

这个问题相当棘手。有两个名称空间包含
JsonOptions
类:

  • Microsoft.AspNetCore.Mvc
  • Microsoft.AspNetCore.Http.Json

  • 使用第一个解决了我的问题。在内部,这两个类非常相似,在中间件实现期间,我没有注意到相应的名称空间。

    您使用的是哪个.net核心版本?您好。我用的是.NET5.0,真奇怪。我已经使用.NETCore3.1对它进行了测试,它确实有效。它也适用于
    AddNewtonsoftJson
    IOptions
    。你能用.NET Core 3.1测试它吗?事实上.NET Core 3.1与我无关,也与Newtonsoft序列化程序无关。不知何故,它在.NET Core 3.1中运行良好。