当前位置: 首页 > 面试题库 >

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

颜文康
2023-03-14
问题内容

我正在使用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输出)。

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

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


问题答案:

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

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


 类似资料:
  • 问题内容: 最近,我一直在进行相当多的JSON解析,并在Node.js和浏览器中传递Javascript,并遇到了这个难题。 我使用构造函数创建的任何对象都无法通过JSON.stringify进行完全序列化,除非我单独初始化构造函数中的所有值!这意味着我的原型在设计这些类时实际上变得毫无用处。 有人可以阐明为什么以下内容没有按我期望的那样进行序列化吗? 怎么了: a_string == {“ in

  • 每次使用时,我都将JSON键按字母顺序排序。我不想把钥匙整理好。我可以禁用在中完成的排序吗?

  • 问题内容: 我可以使用以下语法序列化lambda: 但是,如果我从客户端代码接收到lambda,并且未正确进行转换,则无法序列化它。 如何在不更改其定义的情况下在下面进行序列化: 我试图序列化“派生”对象: 但在每种情况下均以失败。 问题答案: 这是正确的,并且是设计使然。就像无法获取不可序列化的对象并使其在实例化之后可序列化一样,一旦创建了lambda,则将设置其可序列化性。 如果lambda的

  • 问题内容: 以下代码将永远运行,而不是在开始后一秒钟停止。带有无限循环的go例程似乎阻止了另一个例程发送到超时通道。那正常吗? 问题答案: 简短的回答:是的。 当前的实现在goroutines之间使用协作调度。这意味着goroutine必须将执行移交给调度程序,以便另一个goroutine运行。将来有希望使用不会有此限制的抢占式调度程序。 发生以下任何一种情况(可能不是完整的列表)时,Gorout

  • 我有: 三个表:、和. CursorLoader和CursorAdapter:和. ListView:一个简单的ListView. 是否可以坚持使用并使用另一个表中的列实现对的排序?

  • 问题内容: 我有一个模型如下: 我从返回: 当我检查JSON结果时,它确实包含所有,但是(和)上的属性不可见。 如何将这些值也包含在JSON序列化的对象中? 我尝试使用属性来装饰属性,但没有成功。 问题答案: 您的基本困难是JSON有两种类型的容器:对象和数组。从标准: 数组是值的有序集合。数组以(左括号)开始,以(右括号)结束。值之间用(逗号)分隔。 对象是名称/值对的无序集合。对象以(左大括号