Мы используем js-joda LocalDate для представления различных дат в нашей модели и храним эти даты в sessionStorage. Есть ли обобщенный предпочтительный способ хранения этих дат, чтобы они могли сериализоваться / десериализоваться без добавления специального кода к каждому объекту, который их содержит?
Для этого мы использовали стандартный JSON.stringify
/ JSON.parse
, но так как LocalDate
преобразуется в строку ISO при строковом преобразовании, мы теряем ее тип LocalDate
, когда анализируем ее обратно.
Как показано здесь
Вотитоги:
const myObj = { a: "thing", d: LocalDate.parse('2019-01-20') };
const stringified = JSON.stringify(myObj);
const parsed = JSON.parse(stringified);
// this fails because d is no longer a LocalDate
console.log(parsed.d.year());
В настоящее время наш обходной путь заключается в том, что у нас есть пользовательские десериализаторы для любого класса, который содержит LocalDate, но это выглядит немного глупо.
В поисках более чистого решения для этого. Возможно, мы могли бы сделать обобщенный сериализатор для LocalDate, который выводит то же самое, что и модификатор %o
в console.log?
mydate -> serialize -> "LocalDate { _year: 2019, _month: 1, _day: 20}"
Прежде чем мы это сделаем, я посмотрю, было ли это ужесделано правильно или если я просто упускаю что-то очевидное.