WithIsoIntervalConverter() 和 WithIsoDateIntervalConverter() 有什么区别?

What is the difference between WithIsoIntervalConverter() and WithIsoDateIntervalConverter()?

我最近开始使用它附带的 NodaTime, and wanted to use the JSON.NET serializer settings。然而,有一件事我不明白,也没有在文档中找到。

据我了解,现在存在以下内容:

ConfigureForNodaTime()
    // Disable automatic conversion of anything that looks like a date and time to BCL types.
    settings.DateParseHandling = DateParseHandling.None;
    converters.Add(NodaConverters.InstantConverter);
    converters.Add(NodaConverters.IntervalConverter);
    converters.Add(NodaConverters.LocalDateConverter);
    converters.Add(NodaConverters.LocalDateTimeConverter);
    converters.Add(NodaConverters.LocalTimeConverter);
    converters.Add(NodaConverters.DateIntervalConverter);
    converters.Add(NodaConverters.OffsetConverter);
    converters.Add(NodaConverters.CreateDateTimeZoneConverter(provider));
    converters.Add(NodaConverters.DurationConverter);
    converters.Add(NodaConverters.RoundtripPeriodConverter);
    converters.Add(NodaConverters.OffsetDateTimeConverter);
    converters.Add(NodaConverters.CreateZonedDateTimeConverter(provider));

.WithIsoIntervalConverter()
    ReplaceExistingConverters<Interval>(settings.Converters, NodaConverters.IsoIntervalConverter);

.WithIsoDateIntervalConverter()
    ReplaceExistingConverters<DateInterval>(settings.Converters, NodaConverters.IsoDateIntervalConverter);

我不清楚的是,我必须在 WithIsoIntervalConverterWithIsoDateIntervalConverter 之间进行选择,还是需要像 ConfigureForNodaTime().WithIsoIntervalConverter().WithIsoDateIntervalConverter() 一样同时使用两者?或者我根本不需要使用它们中的任何一个而只使用 ConfigureForNodaTime()?

WithIsoIntervalConverter 替换 Interval 类型的转换器。

WithIsoDateIntervalConverter 替换 DateInterval 类型的转换器。

如果您不使用 IntervalDateInterval,您将不会关心转换器如何处理它们。如果您正在 使用其中一种或两种类型,则需要考虑如何将它们序列化。

DateInterval 为例,默认序列化格式(由 ConfigureForNodaTime 配置)生成 JSON,如下所示:

"value": { "Start": "2018-03-15" End: "2018-04-01" }

但是,如果您尝试与需要日期间隔的 ISO 表示的代码进行互操作,则可以使用 WithIsoDateIntervalConverter(),序列化数据将如下所示:

"value": "2018-03-15/2018-04-01"