将Json转换为对象
在我的打字脚本代码中,我有两个类将Json转换为对象,json,angular,typescript,Json,Angular,Typescript,在我的打字脚本代码中,我有两个类ClassA和ClassB: export class ClassA { name: string; classB: ClassB; getName(): string { return this.name; } } export class ClassB { name: string; getName(): string { return this.name; } }
ClassA
和ClassB
:
export class ClassA {
name: string;
classB: ClassB;
getName(): string {
return this.name;
}
}
export class ClassB {
name: string;
getName(): string {
return this.name;
}
}
我尝试将Json解析为ClassA
实例,如下所示:
let classA: ClassA = Object.assign(new ClassA(), JSON.parse('{"name":"classA", "classB": {"name":"classB"}}'));
export interface ClassBData {
name: string;
}
export interface ClassAData {
name: string;
classB: ClassBData;
}
export class ClassA {
name: string;
classB: ClassB;
constructor(json: ClassAData) {
this.name = json.name;
this.classB = Object.assign(new ClassB(), json.classB);
}
getName(): string {
return this.name;
}
}
但是只有ClassA
是实例化的,而在classB属性中不是
我在记录对象时得到以下结果:
console.log(classA); // ClassA {name: "classA", classB: Object}
console.log(classA.getName()); // classA
console.log(classA.classB); // Object {name: "classB"}
console.log(classA.classB.getName()); // EXCEPTION: classA.classB.getName is not a function
可以深入解析Json吗?您需要执行以下操作:
let classA: ClassA = Object.assign(new ClassA(), JSON.parse('{"name":"classA", "classB": {"name":"classB"}}'));
export interface ClassBData {
name: string;
}
export interface ClassAData {
name: string;
classB: ClassBData;
}
export class ClassA {
name: string;
classB: ClassB;
constructor(json: ClassAData) {
this.name = json.name;
this.classB = Object.assign(new ClassB(), json.classB);
}
getName(): string {
return this.name;
}
}
或者您可以用相同的方法实例化ClassB
:
export class ClassB {
name: string;
constructor(json: ClassBData) {
this.name = json.name;
}
getName(): string {
return this.name;
}
}
到目前为止,我发现最好的方法是:
export class ClassA {
name: string;
classB: ClassB;
constructor(json: any) {
this.name = json.name;
if (json.classB !== undefined && json.classB !== null) {
this.classB = new ClassB(json.classB);
}
}
}
export class ClassB {
name: string;
constructor(json: any) {
this.name = json.name;
}
}
可能重复的