我最近开始使用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);
我不清楚,我必须在WithIsoIntervalConverter
和WithIsoDateIntervalConverter
之间选择,还是需要像ConfigureForNodaTime().WithIsoIntervalConverter().WithIsoDateIntervalConverter()
这样使用?或者我只是不必使用其中任何一个而只使用ConfigureForNodaTime()
?
答案 0 :(得分:4)
WithIsoIntervalConverter
替换Interval
类型的转换器。
WithIsoDateIntervalConverter
替换DateInterval
类型的转换器。
如果您未使用Interval
或DateInterval
,则无法关心转换器对它们的作用。如果您 使用其中一种或两种类型,则需要考虑如何将它们序列化。
例如,要坚持使用DateInterval
,默认的序列化格式(由ConfigureForNodaTime
配置)会产生如下的JSON:
"value": { "Start": "2018-03-15" End: "2018-04-01" }
但是,如果您尝试与期望ISO表示日期间隔的代码进行互操作,则可以使用WithIsoDateIntervalConverter()
,而序列化数据将如下所示:
"value": "2018-03-15/2018-04-01"