json - Angular 2 : How to preserve class methods on deserialization?

标签 json angular typescript

假设我有一个类 Foo:

export class Foo {
    name: string;

    printName(): void {
        console.log(this.name);
    } 
}

现在的问题是,当我的 FooService 从我的后端获取一个 Foo 作为 JSON 并从中创建一个 Foo 对象时,它没有 printName() 因为在 JSON 对象中没有这样的东西。

我应该如何安排(在 Angular 2 的上下文中)?我是否必须在类外部创建我的方法,以便它们只将 Foo 作为参数?

例如,在 Java 中,DTO 有方法是完全没问题的。

最佳答案

通常您只通过 http 传输具有值的对象而不是类实例。您必须自己创建类实例

export class Foo {

    constructor(name: string) {}
    printName(): void {
        console.log(this.name);
    } 
}


// data deserialized by angular from the request
let data = { name: 'John' };

let foo: Foo = new Foo(data.name);

如果有帮助,您可以为从服务器接收的数据创建接口(interface),并将其传递给 Foo 类的构造函数。

注意:请记住,TS 中没有类型转换。 如果你正在做类似的事情

let foo: Foo = <Foo> data;

这是一个类型断言,您只是告诉编译器dataFoo 类型,它不会对data 做任何事情对象。

关于json - Angular 2 : How to preserve class methods on deserialization?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42999127/

相关文章:

json - 在 golang 中解码深度嵌套的 json

Angular 组件不断自行刷新,我失去了状态

angular - 从父级访问路由器导出组件

unit-testing - Angular 2 单元测试 : Custom Pipe error The pipe could not be found

c# - 如何修复组件启动时的控制台错误

linux - 将 bash `ls` 输出转换为 json 数组

c# - 使用路径和值更新 JSON 对象

javascript - 无法重新启动 Node 服务器

json - HTTP 请求、JSON、重用连接

angular - 将 ngModel 绑定(bind)到动态复选框列表 : Angular 2/Typescript