NodaTime Interval JSON序列化

时间:2014-02-20 14:16:24

标签: json iso8601 nodatime

NodaTime JSON.net serializer是否有理由不使用ISO8601 Time Interval格式来表达开始和结束时刻?

示例ISO8601时间间隔:

"2007-03-01T13:00:00Z/2008-05-11T15:30:00Z"

NodaTime Complex JSON:

{ Start: "2007-03-01T13:00:00Z", End: "2008-05-11T15:30:00Z" }

ISO8601格式是否不适合NodaTime中的区间概念?

2 个答案:

答案 0 :(得分:4)

  

为什么NodaTime JSON.net序列化程序不使用ISO8601时间间隔格式来表示开始和结束时刻?

是。我在阅读ISO-8601时没有发现它。这不是一个非常好的原因,但它是正确的。

  

ISO8601格式是否不适合NodaTime中的区间概念?

不,它非常合适(与ISO-8601的其他部分一样好),我们绝对应该使用它。我不认为 ISO-8601指定起点是包容性的,结尾是独占的,但这不一定是个问题。

我怀疑我们想要使用的格式是扩展 ISO格式,以包含亚秒值,与其他所有内容一致,但我怀疑这种扩展是相当常见的。

我们需要在配置JSON序列化程序时将其作为一个选项,这有点令人讨厌,但我们绝对应该让它可用。

我已打开feature request 270来解决这个问题。

答案 1 :(得分:3)

我对此的回应与Jon的回应略有不同。我欢迎任何反驳。

  

为什么NodaTime JSON.net序列化程序不使用ISO8601时间间隔格式来表示开始和结束时刻?

是。通过将间隔的起点和终点保持为单独的值,它们可以由任何JSON解析器单独寻址。由于间隔的每个瞬间都以UTC表示(“Z”结尾),因此它们也可以单独排序。

这使得在基于JSON的数据库中执行范围查询变得非常容易,例如在RavenDB中。 (另见RavenDB-NodaTime

它还允许快速计算有效性(start< = end)和duration(end-start),而不必中断JSON并拆分字符串。

ISO间隔格式可以在这里工作,但从JSON的角度来看,它不会那么方便。

  

ISO8601格式是否不适合NodaTime中的区间概念?

这非常适合Noda Time。它不适合JSON。我希望Noda Time的Interval.ToString()和相关文本模式将使用ISO格式。如果他们不这样做,那么将来有一些工作要做。