NodaTime Interval JSON Сериализация

Есть ли причина, по которой сериализатор NodaTime JSON.net не использует формат временного интервала ISO8601 для выражения начального и конечного моментов?

Пример временного интервала 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?

2 ответа

Решение

Есть ли причина, по которой сериализатор NodaTime JSON.net не использует формат временного интервала ISO8601 для выражения начального и конечного моментов?

Да. Я не заметил это при чтении ISO-8601. Это не очень хорошая причина, но это правильная причина.

Не подходит ли формат ISO8601 для концепции интервалов в NodaTime?

Нет, это идеально подходит (так же хорошо, как остальная часть ISO-8601), и мы должны были его использовать. Я не думаю, что в ISO-8601 указано, что начало является всеобъемлющим, а конец - исключительным, но это не должно быть проблемой.

Я подозреваю, что формат, который мы хотели бы использовать, был бы расширенным форматом ISO, чтобы включать значения в секунду, в соответствии со всем остальным, но я подозреваю, что такое расширение довольно распространено.

Нам нужно будет сделать эту опцию при настройке сериализатора JSON, что является небольшим неудобством, но мы обязательно должны сделать его доступным.

Я открыл запрос функции 270, чтобы покрыть это.

Я собираюсь ответить на это немного иначе, чем Джон. Я приветствую любые контраргументы.

Есть ли причина, по которой сериализатор NodaTime JSON.net не использует формат временного интервала ISO8601 для выражения начального и конечного моментов?

Да. Сохраняя начальную и конечную точки интервала как отдельные значения, они индивидуально адресуются любым анализатором JSON. Поскольку каждый момент интервала выражается в UTC (с окончанием "Z"), то они также сортируются индивидуально.

Это упрощает выполнение запросов диапазона в базах данных на основе JSON, например, в RavenDB. (Смотрите также RavenDB-NodaTime)

Это также позволяет быстро вычислить валидность (начало <= конец) и длительность (конец-начало) без необходимости разбивать JSON и разбивать строку.

Здесь может работать формат интервала ISO, но он не будет таким удобным с точки зрения JSON.

Не подходит ли формат ISO8601 для концепции интервалов в NodaTime?

Это отлично подходит для Noda Time. Это просто не очень подходит для JSON. Я ожидаю, что Interval.ToString() и связанные текстовые шаблоны для Noda Time будут использовать формат ISO. Если нет, то есть над чем поработать в будущем выпуске.

Другие вопросы по тегам