将JSON解析为TypeScript对象

时间:2017-05-27 14:24:15

标签: angular typescript

假设我有一个对象:

class Person{
id: number;
name: string;
}

来自API的Json:

{
"id": "10",
"name": "Person Name",
"email": "per@ho.com"
}

如何将JSON转换为Person对象,是Person类中的激动变量?

我试过了:

Object.assign(Person.prototype, this.jsonList))

但我没有工作

1 个答案:

答案 0 :(得分:1)

有关在类中声明属性的信息是" metadata",并且无法直接访问。因此,没有直接的方法可以从某些输入中复制类中存在的属性,这些输入可能包含其他不需要的属性,而不是显式枚举它们。

可以访问此类元数据的JavaScript / TypeScript功能是装饰器。因此,以一般化的方式解决您的问题需要这样的装饰器。装饰器可以生成一个静态方法,它只复制那些实际存在于类中的属性。那看起来像那样:

@ConstructFromJsonWithExtraGarbage()
class Person {
}

const sally = Person.constructWithExtraGarbage(
  {id: 1, name: "Sally", email: "sally@mail.com"});

实际上写这个装饰器超出了这个答案的范围。