一尘不染

原型上的Object.defineProperty阻止JSON.stringify对其进行序列化

json

我正在使用TypeScript定义一些类,当我创建属性时,它会生成Class1与以下plunkr中的等效项:

http://plnkr.co/edit/NXUo7zjJJZaUuyv54TD9i?p=preview

var Class1 = function () {
  this._name = "test1";
}

Object.defineProperty(Class1.prototype, "Name", {
  get: function() { return this._name; },
  set: function(value) { this._name = value; },
  enumerable: true
});

JSON.stringify(new Class1()); // Will be "{"_name":"test1"}"

序列化时,它不会输出我刚刚定义的属性。

instance2instance3通过序列化定义的属性来达到我的期望。(请参阅plunkr输出)。

我的实际问题是:这正常吗?

如果是这样,我如何以最有效的方式解决它?


阅读 222

收藏
2020-07-27

共1个答案

一尘不染

您可以toJSON()在原型上定义一个方法,以自定义实例的序列化方式。

Class1.prototype.toJSON = function () {
    return {
        Name: this.Name
    };
};
JSON.stringify(new Class1()); // Will be '{"Name":"test1"}'
2020-07-27