Angular:Typescript 转换 JSON 响应作为对象模型不起作用
Angular: Typescript casting JSON response as object model not working
我在尝试将 json 响应投射到对象时遇到问题,我的对象的所有属性都是字符串是正常的吗?
这是我的 ajax 请求:
public getSingle = (keys: any[]): Observable<Badge> => {
return this._http.get(this.actionUrl + this.getKeysUrl(keys))
.map((response: Response) => response.json() as Badge )
.catch(this.handleError);
}
这是我的徽章模型:
export interface Badge {
badgeNumber: number;
authorizationLevel: number;
endOfValidity: Date;
}
这里是我调用服务函数的地方,我遇到了这个问题:
this._badgeService.getSingle(this.ids).subscribe(
(badge: Badge) => {
console.log(typeof(badge.endOfValidity)); // <-- returning string and not Date
},
error => console.log(error);
});
这有点难以解释:
Date
是一个 class,这意味着需要通过构造函数调用创建 Date 类型的值。换句话说,用 new Date(...)
.
创建一个 class 实例
Response.json方法只会return一个JSON格式的对象,并且不包含任何class的实例,只有[=23=的映射].
所以您需要做的是手动将值 returned 从 .json() 转换为 Base 对象。这可以按如下方式完成:
public getSingle = (keys: any[]): Observable<Badge> => {
return this._http.get(this.actionUrl + this.getKeysUrl(keys))
.map(r => r.json())
.map(v => <Badge>{
badgeNumber: v.badgeNumber,
authorizationLevel: v.authorizationLevel,
endOfValidity: new Date(v.endOfValidity)
// preferably this string should be in ISO-8601 format
})
//the mapping step can be done in other ways most likely
.catch(this.handleError);
}
我在尝试将 json 响应投射到对象时遇到问题,我的对象的所有属性都是字符串是正常的吗?
这是我的 ajax 请求:
public getSingle = (keys: any[]): Observable<Badge> => {
return this._http.get(this.actionUrl + this.getKeysUrl(keys))
.map((response: Response) => response.json() as Badge )
.catch(this.handleError);
}
这是我的徽章模型:
export interface Badge {
badgeNumber: number;
authorizationLevel: number;
endOfValidity: Date;
}
这里是我调用服务函数的地方,我遇到了这个问题:
this._badgeService.getSingle(this.ids).subscribe(
(badge: Badge) => {
console.log(typeof(badge.endOfValidity)); // <-- returning string and not Date
},
error => console.log(error);
});
这有点难以解释:
Date
是一个 class,这意味着需要通过构造函数调用创建 Date 类型的值。换句话说,用 new Date(...)
.
Response.json方法只会return一个JSON格式的对象,并且不包含任何class的实例,只有[=23=的映射].
所以您需要做的是手动将值 returned 从 .json() 转换为 Base 对象。这可以按如下方式完成:
public getSingle = (keys: any[]): Observable<Badge> => {
return this._http.get(this.actionUrl + this.getKeysUrl(keys))
.map(r => r.json())
.map(v => <Badge>{
badgeNumber: v.badgeNumber,
authorizationLevel: v.authorizationLevel,
endOfValidity: new Date(v.endOfValidity)
// preferably this string should be in ISO-8601 format
})
//the mapping step can be done in other ways most likely
.catch(this.handleError);
}