我在尝试将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是一个 类 ,这意味着需要通过构造函数调用创建Date类型的值。换句话说,使用创建一个类实例new Date(...)。
Date
new Date(...)
Response.json方法将仅返回JSON格式的对象,并且该类不包含任何类的实例,仅包含key:property的映射。
因此,您需要做的是将.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); }