首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Json深入人心

Json深入人心
EN

Stack Overflow用户
提问于 2017-03-20 16:43:21
回答 2查看 43关注 0票数 0

在我的TypeScript代码中,我有两个类ClassAClassB

代码语言:javascript
运行
复制
export class ClassA {
    name: string;
    classB: ClassB;

    getName(): string {
        return this.name;
    }
}

export class ClassB {
    name: string;

    getName(): string {
        return this.name;
    }
}

我尝试将Json解析为如下所示的ClassA实例:

代码语言:javascript
运行
复制
let classA: ClassA = Object.assign(new ClassA(), JSON.parse('{"name":"classA", "classB": {"name":"classB"}}'));

但是只有ClassA是实例化的,而classB属性中没有实例化。

当我记录对象时,我有以下结果:

代码语言:javascript
运行
复制
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吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-25 08:22:46

到目前为止,我发现最好的方法是:

代码语言:javascript
运行
复制
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;
    }
}
票数 0
EN

Stack Overflow用户

发布于 2017-03-20 16:49:58

你需要这样做:

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
export class ClassB {
    name: string;

    constructor(json: ClassBData) {
        this.name = json.name;
    }

    getName(): string {
        return this.name;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42909258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档