【问题标题】:Angular 5.2.10 - TypeScript 2.4.2 property accesor json mappingAngular 5.2.10 - TypeScript 2.4.2 属性访问器 json 映射
【发布时间】:2018-04-28 11:53:45
【问题描述】:

我有一个问题,我似乎找不到解决方案,或者我的搜索有误。问题如下:

背景

我有一个 BookingEvent 类,定义如下:

export class BookingEvent {
    title: string;

    private _startDate: Date;

    set startDate(value: Date) {
        let valueMoment = moment(value);
        if (valueMoment.isValid()) this._startDate = valueMoment.toDate();

    }

    get startDate(): Date {
        return this._startDate;
    }

    private _endDate: Date;

    set endDate(value: Date) {
        let valueMoment = moment(value);
        if (valueMoment.isValid()) this._endDate = valueMoment.toDate();
    }
}

除了上述之外,我还有一个带有模板的表单组件,它可以通过两种方式绑定到属性。

问题

当我将表单数据保存到远程 api 时,我意识到 json 生成的映射我的 startDate & endDate 绑定属性分别为 _startDate_endDate,如下所示:

{
        "title": "My awesome event",
        "_startDate": "2018-04-26T20:50:00.000Z",
        "_endDate": "2018-04-27T19:50:00.000Z"
    }

问题

为什么原生 json 映射器使用私有属性名称而不是公共属性名称?如何确保使用公共属性名称?

【问题讨论】:

  • JSON 不实例化类。您不应该使用类来表示您的传输对象

标签: json angular typescript


【解决方案1】:

您可以specify a toJSON() method 自定义对象在使用JSON.stringify(...) 序列化时的外观。该链接详细说明了它如何确定要包含在被序列化的对象中的内容。 JavaScript 没有私有属性的概念,所以它们就像其他任何东西一样只是属性。

class BookingEvent {
    // all the rest of your code

    toJSON() {
        return {
            title: this.title,
            startDate: this.startDate,
            endDate: this.endDate
        }
    }
}

【讨论】:

  • 非常感谢@Daniel W Strimpel,这很有魅力。
猜你喜欢
  • 2021-09-15
  • 2020-07-17
  • 2019-07-27
  • 2018-03-15
  • 1970-01-01
  • 2017-05-02
  • 1970-01-01
  • 1970-01-01
  • 2022-11-20
相关资源
最近更新 更多