使用Angular2和typescript,我從webApi返回JSON,並且需要將其轉換爲特定類型的數組。我無法弄清楚如何將json轉換爲我需要的接口。Angular2將json結果轉換爲接口
我喜歡的類型是這樣的接口:
我的模擬返回此陣:
export var COUNTRIES: Country[] = [
{ "Id": 11, "Name": "US" },
{ "Id": 12, "Name": "England" },
{ "Id": 13, "Name": "Japan" }
];
這裏是我的代碼: country.service.ts
@Injectable()
export class CountryService {
private _http = null;
constructor(http: Http) {
this._http = http;
}
getCountries() {
return Promise.resolve(COUNTRIES);
}
}
然後我這樣稱呼:
export class CountryPickerComponent {
public countries: Country[];
constructor(private _countryService: CountryService) { }
getCountries() {
this._countryService.getCountries().then(data => this.setData(data));
}
setData(data) {
//this.countries = data;
this.countries = JSON.parse(data);
var q = 1;
}
ngOnInit() {
this.getCountries();
}
}
正如你所看到的,我有一個名爲country的類變量,它是Country界面的一個數組。這按預期工作。 (我知道我不需要setData方法 - 它用於調試)
接下來,我將服務更改爲返回此json的wepApi調用。
"[{"name":"England","id":1},{"name":"France","id":2}]"
我在服務改變了的getCountries方法:
getCountries() {
return new Promise(resolve=>
this._http.get('http://localhost:63651/Api/membercountry')
.subscribe(data => resolve(data.json()))
);
}
使用JSON.parse,我將其轉換爲一個陣列,其餘然後可以在angular2使用。有用。它用數據創建數組。但它不是一個實現Country界面的數組。
請注意,JSON中的字段名都是小寫字母,但接口屬性以大寫字母開頭,並且我編碼到接口。結果,當我得到真正的JSON時,它不起作用。有沒有辦法將這個「投射」到界面,這應該會拋出一個錯誤,讓我知道一些錯誤?
許多例子中的get使用地圖,如下圖所示:
getCountries() {
var retVal;
return new Promise(resolve=>
this._http.get('http://localhost:63651/Api/membercountry')
.map(ref => ref.json())
.subscribe(data => resolve(data.json()))
);
}
我找不到這個文件。當我嘗試它時,我從來沒有收到數據,但沒有錯誤。沒有編譯錯誤和沒有運行時錯誤。
如果您使用的是'angular 2 beta','map'在'http.get()'返回的'Observable'中不可用,而直接在'Observable'上使用'subscribe'。 – TheKojuEffect