Cru*_*ids 12 .net c# system.text.json .net-6.0
tl;dr: 如何将 DateOnly JsonConverter 添加到 .net6 Web api 的应用程序配置中?
我有一个带有 DateOnly 属性的对象,我正在从控制器返回它。当我提出请求时,出现错误“不支持‘System.DateOnly’实例的序列化和反序列化”。
我了解 .net6 中 DateOnly 和 TimeOnly 的反/序列化存在限制(https://github.com/dotnet/runtime/issues/53539),并且我遵循了自定义 JsonConverter 的推荐使用。然而,我遇到的问题是初始化转换器的位置。
我尝试在网络应用程序生成器中添加转换器......
builder.Services
.AddControllers()
.AddJsonOptions(options => options.JsonSerializerOptions.Converters.Add(new DateOnlyConverter()));
Run Code Online (Sandbox Code Playgroud)
但没有运气。
然后我尝试专门配置它
builder.Services.Configure<JsonSerializerOptions>(options =>
options.Converters.Add(new DateOnlyConverter()));
Run Code Online (Sandbox Code Playgroud)
那里也没有运气。
所以我尝试从控制器返回 Results.Json 并在 options 中使用转换器Results.Json(status, options)。即使这样也行不通。
不过,有效的方法是将属性直接添加到属性中
[property: JsonConverter(typeof(DateOnlyConverter))]
DateOnly DateOrdered,
Run Code Online (Sandbox Code Playgroud)
我宁愿不必将此属性添加到 DateOnly 的每次使用中,而且我真的不清楚当转换器被配置为 WebApplication 的一部分时,是什么阻止了转换器被调用。我在 .net5 应用程序中做过类似的事情,并假设 IHostBuilder 和 WebApplicationBuilder 之间的一些细微差别可能导致该问题。
编辑:可能值得注意的是我正在使用新的最小 api。但即使是 Microsoft 也指出 Json 序列化可以在此处的文档中进行配置。该文档显示的语法与常用的语法略有不同,builder.Services.Configure<JsonOptions>所以我认为这可能就是问题所在。也许最小的 api 的配置处理方式不同。但事实并非如此。至少,使用最小 api 文档中的建议配置并没有解决问题。
好吧,经过足够的搜索,我找到了答案。是的,最小 api 的配置是单独的。该文档就在上面,他们描述了使用builder.Services.Configure<JsonOptions>(options => ...). 希望这个答案能够帮助将来那些急于仔细阅读文档的人。
| 归档时间: |
|
| 查看次数: |
10500 次 |
| 最近记录: |