我只想反序列化我从我的服务器API得到的JSON。
对于这里提到的大多数解决方案(没有使用任何第三方库),看起来问题都解决了。例如,在这个SO线程上投票最多的答案是:HERE
但我观察到的警告是,当json响应中有一些我不期望的额外属性时,行为并不是我所期望的。
让我们举个例子:
class Person {
id: number;
name: string;
}
let jsonString = `{
"id": 1,
"name": "sumit",
"age": 23
}`;
let person: Person = Object.assign(new Person(), JSON.parse(jsonString));
console.log(Object.keys(person));
console.log(JSON.stringify(person));
因此,当我稍后使用" Person“对象时,我希望它只包含Person类中提到的那些属性,毕竟"person”是"person“类型。但令人惊讶的是,在序列化person时,它包含了一些不在Person类中的额外属性。这里的“年龄”
上面的输出是:
["id", "name", "age"]
{"id":1,"name":"sumit","age":23}
现在,我如何确保在反序列化之后,对象"person“没有任何额外的属性。
发布于 2019-10-08 14:38:31
如果从JSON到Person对象使用JSON.Parse,则不会创建Person对象的原型。这意味着,例如,如果您在Person对象上添加了getter,则无法访问它,因为它在JSON上不可用。您需要做的是创建一个新的Person对象并映射JSON中的每个属性。
有一些库可以将JSON序列化/反序列化为对象(Person类)。请在下面的库中查看,以供参考。
https://www.npmjs.com/package/@peerlancers/json-serialization
发布于 2021-05-21 23:20:51
其他的答案是正确的。您应该考虑使用3-d party库来进行正确的typescript类-json序列化,比如https://www.npmjs.com/package/ts-jackson
https://stackoverflow.com/questions/43019452
复制相似问题