.net6 api中的DateOnly Json转换



tl;dr:如何将DateOnly JsonConverter添加到.net6 web api的应用程序配置中?

我有一个对象,上面有DateOnly属性,我从控制器返回它。当我提出请求时;不支持"System.DateOnly"实例的序列化和反序列化;。

我知道.net6中DateOnly和TimeOnly的反序列化有局限性(https://github.com/dotnet/runtime/issues/53539)并且我遵循了自定义JsonConverter的推荐使用。然而,我遇到的问题是在哪里初始化转换器。

我尝试在web应用程序生成器中添加转换器。。。。


builder.Services
.AddControllers()
.AddJsonOptions(options => options.JsonSerializerOptions.Converters.Add(new DateOnlyConverter()));

但没有运气。

然后我试着专门配置

builder.Services.Configure<JsonSerializerOptions>(options =>
options.Converters.Add(new DateOnlyConverter()));

那里也没有运气。

因此,我尝试从控制器返回Results.Json,并在选项Results.Json(status, options)中使用转换器。即使这样也没有奏效。

不过,真正起作用的是直接向属性添加一个属性

[property: JsonConverter(typeof(DateOnlyConverter))]
DateOnly DateOrdered,

我不想每次使用DateOnly都添加这个属性,而且我真的不清楚是什么阻止了转换器在配置为WebApplication的一部分时被调用。我在.net5应用程序中也做过类似的事情,我认为IHostBuilder和WebApplicationBuilder之间的一些细微差别可能是导致这个问题的原因。

编辑:可能值得注意的是,我正在使用新的最小api。但就连微软也指出Json序列化在这里的文档中是可配置的。文档显示的语法与常用的builder.Services.Configure<JsonOptions>略有不同,所以我认为这可能是问题所在。也许最小api的配置处理方式不同。但事实并非如此。至少,在最小api文档中使用建议的配置并没有解决问题。

好吧,经过足够的搜索,我找到了答案。是的,最小api的配置是单独的。上面的文档描述了使用builder.Services.Configure<JsonOptions>(options => ...)配置minimum api的json序列化。希望这个答案能帮助那些不耐烦地仔细阅读文档的人。

最新更新