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

时间:2018-04-02 13:58:42

标签: nodatime

我最近开始使用NodaTime,并希望使用随附的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()

1 个答案:

答案 0 :(得分:4)

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"