【问题标题】:Json convert TimeSpan Error .Net Core 2.2Json转换TimeSpan错误.Net Core 2.2
【发布时间】:2020-02-25 15:18:34
【问题描述】:

我使用 .net core 2.2,我尝试从 WebApi 反序列化数据,但 TimeSpan 类型未转换。

我的 InnerException 是:{“无法从 System.String 转换为 System.TimeSpan.”}

我的错误信息是:{" 将值“PT20H20M”转换为类型“System.TimeSpan”时出错。路径 'value[0].StartTime',第 1 行,位置 179。"}

问题出在我班的一名成员身上: 公共时间跨度开始时间 { 获取;放; }

有人会遇到同样的错误吗,或者有人可以给我一些关于如何管理问题的想法。

谢谢!

【问题讨论】:

  • 请向我们展示您的代码和数据

标签: json .net-core timespan converters iso8601


【解决方案1】:

好吧,我猜错误是默认转换器不知道您尝试发送的格式。您必须使用它可以理解的格式或使用自定义转换器或使用字符串并在之后自行转换.

如果您运行 TimeSpan.Parse("PT20H20M"),您将收到一条错误消息,指出它不是有效格式。

看来这个电话可以给你一个TimeSpan

System.Xml.XmlConvert.ToTimeSpan("P2DT01H")

您可以使用herehere 所述的自定义转换器(第一个用于.net core 3)。

【讨论】:

  • 谢谢你。 “PT20H20M”是 ISO8601 的持续时间格式,它是表示日期或期间的约定。我的数据在 SQL Server 中有“20:20”表示。自定义转换器是什么意思?
  • 这是一个允许自定义转换的 Web.Api 功能。您可以在 Microsoft 文档中查看它。最简单的方法是接受一个字符串并将其转换(请参阅我的扩展答案)。
  • @MUTIJIMA 正如你所说,这是一种持续时间格式。 TimeSpan 无法解析持续时间。如果你想要更丰富的时间支持(包括 IANA 时区支持),你应该考虑使用 NodaTime
猜你喜欢
  • 2020-08-22
  • 1970-01-01
  • 1970-01-01
  • 2020-03-05
  • 2019-08-04
  • 1970-01-01
  • 2019-09-28
  • 2021-05-14
  • 1970-01-01
相关资源
最近更新 更多