【问题标题】:NodaTime Interval JSON SerializationNodaTime 间隔 JSON 序列化
【发布时间】:2014-02-20 14:16:24
【问题描述】:

NodaTime JSON.net serializer 不使用ISO8601 Time Interval 格式来表示开始和结束瞬间有什么原因吗?

示例 ISO8601 时间间隔:

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

NodaTime 复杂 JSON:

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

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

【问题讨论】:

    标签: json iso8601 nodatime


    【解决方案1】:

    NodaTime JSON.net 序列化程序不使用 ISO8601 时间间隔格式来表示开始和结束时刻是否有原因?

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

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

    不,它非常适合(与 ISO-8601 的其余部分一样好),我们绝对应该使用它。我不认为 ISO-8601 规定开始是包容性的,结束是排斥性的,但这不是问题。

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

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

    我已经打开 feature request 270 来报道这个。

    【讨论】:

    • 我问这个是因为我正在为 NodaTime 实现 ServiceStack.Text 序列化。我可能会支持这两种方式以与 JSON.net 序列化程序保持一致。我应该也可以将它添加到 JSON.net 序列化程序中。
    • @TonyCarl: 酷 :) 我看看能不能在周末把它添加到 Noda Time 的默认分支,为你节省一份工作:)
    【解决方案2】:

    我将对此做出与乔恩稍有不同的回应。我欢迎任何反驳。

    NodaTime JSON.net 序列化程序不使用 ISO8601 时间间隔格式来表示开始和结束时刻是否有原因?

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

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

    它还允许快速计算有效性(开始

    ISO 间隔格式可以在这里工作,但从 JSON 的角度来看就不太方便了。

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

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

    【讨论】:

      猜你喜欢
      • 2013-01-25
      • 1970-01-01
      • 1970-01-01
      • 2016-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多