2017-02-18 111 views
1

我從服務器獲取一些數據,然後將其解析爲TypeScript類。我試圖使用一些繼承 - 每個類都需要能夠報告它的類型。 這裏是如何工作的:解析JSON時未調用數據對象構造函數

這是基類

import { PageElementType } from './page-element-type' 

export class PageElement { 
    pageElementType: PageElementType; 
    constructor(aPageElementType: PageElementType) { 
     this.pageElementType = aPageElementType; 
    } 
} 

這是一個派生類

import { PageElement } from './page-element.model' 
import { PageElementType } from './page-element-type' 

export class Metadata extends PageElement { 
    id: number; 
    body: string; 

    constructor(){ 
     super(PageElementType.metadata); 
    } 
} 

這裏的服務功能,我打電話來解析數據

getExam(){ 
    let exam = this.http.get('http://orangeberry.hopto.org/api/Exam/1') 
    .map((response:Response) => <Exam>response.json()) 
    .do(data => console.log(data)); 
    return exam; 
} 

似乎我得到某種簡單的物體。我需要實際遵循類定義的有意義的功能對象。在我的情況下實現這個最簡單和最直接的方法是什麼?

+0

你期待'Exam'的一個實例嗎? –

+0

是的。對不起,如果我的示例代碼是錯誤的:類型功能是在其他類中實現的,而不是考試本身。考試包含一組元數據對象。 –

回答

1

轉換隻是靜態代碼分析的提示,但在運行時不起作用。

如果你想要的值成爲一個類的實例,你需要自己創建這樣一個實例:

.map((response:Response) => new Exam(response.json())) 

其中Exam類的構造函數分解JSON其屬性。

+0

我明白了。謝謝!我已經閱讀了反序列化的4個選項,在這裏指出:http://stackoverflow.com/questions/22885995/how-do-i-initialize-a-typescript-object-with-a-json-object。最後一個選項對我來說似乎是最好的選擇。我的TypeScript類中的變量名稱匹配json字段。沒有任何直接的方法可以將json解析爲pojo,然後將這些值克隆到我的Typescript對象中? –

+0

如果JSON沒有嵌套對象,Object.keys(json).map(k => this [k] = json [k])''。其實我對這部分不太瞭解,因爲我自己並沒有使用TypeScript。 –

+0

是的,嵌套對象將阻止這種「自動化」方法。感謝Günter! –

相關問題