在我的TypeScript代码中,我有2个类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"}}'));
但只有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?
答案 0 :(得分:0)
你需要做这样的事情:
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;
}
}
答案 1 :(得分:0)
到目前为止,我找到的最好方法是:
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;
}
}