【问题标题】:Serialise object to string and unserialise back to object in ECMAScript 6 [duplicate]在 ECMAScript 6 中将对象序列化为字符串并反序列化回对象 [重复]
【发布时间】: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


【解决方案1】:

目前无法将 JSON 反序列化为对象,因为 JSON 语法没有关于类名的定义。因此,应该有一个解包器功能。

在反序列化过程的对象可以自动完成之前,应修改 JSON 语法以包含类名。

例如。

SomeClass {
    "field1": "value1",
    "field2": "value2"
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    • 2018-07-06
    • 2021-01-16
    • 2020-10-19
    • 2014-01-04
    • 2015-01-29
    • 2020-02-03
    相关资源
    最近更新 更多