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. Если нет, то есть над чем поработать в будущем выпуске.