json - Angular 5.2.10 - TypeScript 2.4.2 属性访问器 json 映射
问题描述
我有一个问题,我似乎无法找到解决方案,或者我的搜索错误。问题如下:
背景
我有一个 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 映射器使用私有属性名称而不是公共属性名称?如何确保使用公共属性名称?
解决方案
您可以指定一种toJSON()
方法来自定义对象在使用 序列化时的外观JSON.stringify(...)
。该链接详细说明了它如何确定要包含在被序列化的对象中的内容。JavaScript 没有私有属性的概念,所以它们就像其他任何东西一样只是属性。
class BookingEvent {
// all the rest of your code
toJSON() {
return {
title: this.title,
startDate: this.startDate,
endDate: this.endDate
}
}
}
推荐阅读
- c# - 如何为不同的环境配置 Application Insights?
- java - 从通知导航到活动时丢失活动状态
- c# - 在哪里设置 PublishReadyToRun?
- javascript - Javascript在表格中显示更多按钮
- node.js - 为什么我们使用 path.join 而不是使用相对路径来访问 express 和节点服务器运行中的公共目录?
- keras - 神经网络可以根据其他时间序列预测时间序列吗?
- elasticsearch - 关于elasticsearch group by 两个字段然后过滤或者排序
- html - 下载HTML文件powershell的所有内容
- ios - 在 UICollectionViewCell 中的 UICollectionView 中实现搜索功能
- python - 定义一个函数并将其用于python中的多个文件或模块