【发布时间】:2020-02-19 19:47:07
【问题描述】:
我们使用 js-joda LocalDate 来表示模型中的各种日期,并将这些日期存储在 sessionStorage 中。是否有一种通用的首选方法来存储这些日期,以便它们可以序列化/反序列化,而无需向包含它们的每个对象添加特殊代码?
我们一直在使用标准JSON.stringify / JSON.parse 来执行此操作,但是由于LocalDate 在字符串化时会转换为ISO 字符串,因此当我们将其解析回来时会丢失其LocalDate 类型。
如图所示here
总结如下:
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 制作一个通用的序列化器,输出与 console.log 中的 %o 修饰符相同的内容?
mydate -> serialize -> "LocalDate { _year: 2019, _month: 1, _day: 20}"
在我们这样做之前,我想看看这是否已经完成,或者我是否只是遗漏了一些明显的东西。
【问题讨论】:
-
遇到了同样的问题。最后在 JSON 中添加了一个字段
$type,该字段存储了一个表示类型的标签。
标签: json serialization ecmascript-6 js-joda