2017-02-13 8 views
1

Существует новое ключевое слово «класс» в ES6 (ECMAScript 6), и мой класс так:сериализация объекта в строку и unserialise обратно на объект в ECMAScript 6

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, не содержит имени класса и , таким образом, JSON.parse (или другие утилиты) не сможет повторно отключить объект obj. После использования JSON.parse на 'str', результат больше не является экземпляром класса MyClass.

var objFromStr = JSON.parse(str); 
console.log(objFromStr); 
//result: 
//{MyProperty:0} 

Как сериализовать экземпляр для строки и несериализовать обратно в экземпляр в ES6? Если JSON.stringify/JSON.parse не работает, какие-либо хорошие библиотеки для использования в NodeJS?

+1

JSON не включает понятие классов. Он представляет собой простые объекты, массивы и примитивы. Если вы хотите восстановить объекты в экземплярах класса, вы можете предоставить настраиваемую функцию («reviver») в качестве второго параметра для 'JSON.parse()' для обработки анализируемых данных и вернуть их так, как вам хотелось бы , – JLRishe

+1

https://www.npmjs.com/package/json-serialize – JLRishe

+3

У вас может быть статический метод для класса, например. 'MyClass.fromJSON()' и реализовать десериализацию самостоятельно. – sdgluck

ответ

0

Невозможно десериализовать JSON для объекта в настоящее время, поскольку синтаксис JSON не имеет определения имени класса. Таким образом, должна появиться функция распаковщика.

Синтаксис JSON должен быть изменен, чтобы включить имя класса перед объектом для процесса десериализации, которое может быть выполнено автоматически.

Например.

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

 Смежные вопросы

  • Нет связанных вопросов^_^