tl;dr:如何将DateOnly JsonConverter添加到.net6 web的应用程序配置中?
我有一个带有DateOnly属性的对象,我将从控制器返回它。当我提出请求时,我会得到错误“不支持'System.DateOnly‘实例的序列化和反序列化”。
我理解DateOnly和TimeOnly在.net6 (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之间的一些细微差别可能是造成问题的原因。
编辑:可能值得注意的是,我正在使用新的最小apis。但就连微软也指出,Json序列化是可配置的在这里的医生里。文档显示的语法与常用的builder.Services.Configure<JsonOptions>略有不同,因此我猜想这可能是问题所在。也许最小的apis的配置处理方式不同。但不是这样。至少,在最小api文档中使用建议的配置并不能解决问题。
发布于 2021-11-25 00:41:44
好吧,经过足够的搜索,我找到了答案。是的,最小apis的配置是独立的。文档就在上面,他们描述了使用builder.Services.Configure<JsonOptions>(options => ...)配置最小api的json序列化。希望这个答案将帮助其他人在未来过于不耐烦地仔细阅读文档。
https://stackoverflow.com/questions/70099730
复制相似问题