【发布时间】:2017-07-01 07:14:21
【问题描述】:
ES6(ECMAScript 6)中有一个新的关键字'class',我的类是这样的:
class MyClass {
constructor() {
this.MyProperty = 0;
}
}
var obj = new MyClass();
console.log(obj);
//result:
//MyClass {MyProperty:0}
var str = JSON.stringify(obj);
console.log(str);
//result:
//"{MyProperty:0}"
问题是使用 JSON.stringify 获得的“str”不包含类名,因此 JSON.parse(或其他实用程序)将无法反序列化回“obj”对象。在 'str' 上使用 JSON.parse 后,结果不再是 MyClass 类的实例。
var objFromStr = JSON.parse(str);
console.log(objFromStr);
//result:
//{MyProperty:0}
如何在 ES6 中将实例序列化为字符串并反序列化回实例? 如果 JSON.stringify/JSON.parse 不起作用,有什么好的库可以在 NodeJS 中使用?
【问题讨论】:
-
JSON 不涉及类的概念。它表示普通对象、数组和原语。如果您想将您的对象重构为类实例,您可以提供一个自定义函数(“reviver”)作为
JSON.parse()的第二个参数来处理正在解析的数据并以您想要的方式返回它。 -
你可以在类上有一个静态方法,例如
MyClass.fromJSON(),自己实现反序列化。 -
JSON 语法应修改为在反序列化过程的对象之前包含一个类名
标签: javascript json node.js serialization ecmascript-6