【问题标题】:JSInterop.Json.Deserialize is losing milliseconds from DateTime objectsJSInterop.Json.Deserialize 正在从 DateTime 对象中丢失毫秒
【发布时间】:2019-04-03 19:45:49
【问题描述】:

在我的 Blazor 0.9.0 项目中,我有一个大的 json 字符串,用于包含包含毫秒在内的 DateTime 属性的对象列表。这通过 Ajax 传递给我的 .cshtml 文件,我在字符串上调用 Microsoft.JSInterop.Json.Deserialize。除了 DateTime 对象丢失毫秒之外,这很好地反序列化。对于 JsonConvert,这可以通过使用 JsonSerializerSettings DateParseHandling 来纠正。我们如何在 Blazor 中做到这一点?

var json = "{\"timestamp\":\"2019-03-01T12:22:26.102Z\"}";

我希望这将被反序列化为 01/03/2019 12:22:26:102 但实际结果是 01/03/2019 12:22:26

【问题讨论】:

  • 我猜你可以在 Blazor 中使用 Newtonsoft.Json...
  • Z Iw/o a space) 可能不是那么标准 - 您是否检查了另一个方向,从 DateTime(Offset) 的序列化产生了什么?
  • 马上去看看!

标签: json blazor


【解决方案1】:

Blazor 使用 SimpleJson,而不是 NewtonSoft。这也会影响Http.GetJsonAsync<T>

对于从 API 返回的一些看起来很正常的 Json(randomuser.me 是一个例子),我感到很沮丧。

我刚刚添加了 NewtonSoft 包,并使用 HttpClient 将结果作为字符串下载。

【讨论】:

  • 我确实在 Blazor 0.7 之前的版本中使用过 NewtonSoft,但它在处理最基本的任务时遇到了问题。我会尝试再次添加它,看看它的表现如何。如果有效,将标记为答案。
  • 我也注意到 Http.GetJsonAsync 目前在具有数百条记录的数据库调用中中断 - 这显然是一个已知问题。我不得不为更大的调用切换 Http.GetAsync()。
  • NewtonSoft 即使在使用 JsonSerializerOptions 时也有同样的问题 - 日期是通过 json 正确传递的,包括毫秒。反序列化会丢失毫秒。将不得不修改调用以仅返回我猜的字符串。
【解决方案2】:

不幸的是,解决方案不得不创建 Date 字段的字符串表示形式,以在反序列化后保持毫秒数。如果出于某种原因在 Blazor 中实现,NewtonSoft 12.01 和 JSInterop 目前都不会保持毫秒。

【讨论】:

    猜你喜欢
    • 2015-01-10
    • 2017-08-21
    • 1970-01-01
    • 2011-05-23
    • 2023-01-03
    • 2017-02-02
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    相关资源
    最近更新 更多