【问题标题】:How to configure NodaTime serialization for System.Text.Json in Blazor WASM .Net 6如何在 Blazor WASM .Net 6 中为 System.Text.Json 配置 NodaTime 序列化
【发布时间】:2022-07-28 06:25:55
【问题描述】:

如何在 Blazor WASM .Net 6 中为 System.Text.Json 配置 NodaTime 序列化?在 WebApi 你会做 builder.Services.AddControllers().AddJsonOptions(settings => settings.JsonSerializerOptions.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb));

但 Blazor WASM 中没有控制器。

这也不起作用: builder.Services.Configure<JsonSerializerOptions>(options => options.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb));

var options = new JsonSerializerOptions().ConfigureForNodaTime(DateTimeZoneProviders.Tzdb); 并且提供给HttpClient 也不起作用。

【问题讨论】:

  • 这感觉它可能不是真正特定于 Noda Time - 我希望任何解释如何在 Blazor WASM 项目中为 System.Text.Json 执行配置的教程/问题然后适用于 Noda时间。
  • 从我的许多小时的工作来看,不存在这样的配置。此外,使用var options = new JsonSerializerOptions().ConfigureForNodaTime(DateTimeZoneProviders.Tzdb); 并在每个HttpClient 请求上提供这些选项也不起作用。它实际上导致整个对象没有正确反序列化并且没有抛出异常。
  • 我也看到了这种情况并试图将其隔离

标签: serialization system.text.json nodatime


【解决方案1】:

这是一个 hack 和解决方法,但我最终使用 Newtonsoft 来解决这个问题

//Should work but doesn't
var options = new JsonSerializerOptions().ConfigureForNodaTime(DateTimeZoneProviders.Tzdb);
var customClassList = await Http1.GetFromJsonAsync<List<customClass>>($"api/CustomClass", options);

//Get the raw json string        
var response = await Http1.GetAsync($"api/CustomClass");
var content = await response.Content.ReadAsStringAsync();

//Also doesn't work (System.Text.Json)
var customClassList = JsonSerializer.Deserialize<List<CustomClass>>(content, options);

//Using Newtonsoft works
var settings = new JsonSerializerSettings();
settings.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb);
var customClassList = JsonConvert.DeserializeObject<List<CustomClass>>(content, settings);

我怀疑这与 Blazor/WASM 有关,因为上面的代码基本上是带有 System.Text.Json 的 json 和 nodatime 的默认示例。但是,我的 Blazor 应用程序中没有出现任何奇怪的错误或异常。它只是没有正确反序列化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 1970-01-01
    • 2022-01-01
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多