Я занимался миграцией кодовой базы с Angular 4.x на 5.x, и столкнулся со странной проблемой. У меня есть сервисная функция, предназначенная для возврата списка объектов во внешний интерфейс, который я затем массирую в определенный формат данных. Я знаю, что мне нужно сохранить отображение, но я немного раздражен тем, что он возвращает только простые строковые данные.
Оригинальная функция такова: (используя Http из @angular/http
, просто переименованный в HttpClient)
public GetVendors(showAll = true, screenArea: number = 0): Observable<Array<SelectModel>> {
let link = AppSettings.API_COMMON_VENDORS;
let params: URLSearchParams = new URLSearchParams();
params.set('showAll', showAll.toString());
params.set('screenArea', screenArea.toString());
let requestOptions = new RequestOptions();
requestOptions.search = params;
return this.httpClient.get(link, requestOptions).map(response => {
let result = JSON.parse(response.json());
let list = new Array<SelectModel>();
let vendors: Array<any> = result;
vendors.forEach(vendor => {
list.push(this.CreateSelectModel(vendor));
});
return list;
});
}
и после извлечения ВСЕХ кода Http, вот функция снова, используя HttpClient
из @angular/common/http
public GetVendors(showAll = true, screenArea: number = 0): Observable<Array<SelectModel>> {
let link = AppSettings.API_COMMON_VENDORS;
let params: HttpParams = new HttpParams()
.set('showAll', showAll.toString())
.set('screenArea', screenArea.toString());
return this.httpClient.get<Array<any>>(link, {params}).map(response => {
let list = new Array<SelectModel>();
response.forEach(vendor => {
list.push(this.CreateSelectModel(vendor));
});
return list;
});
}
Проблема в том, что это своего рода побеждаетЦель нового клиента разбора JSON для меня. Объект response
- это строка, представляющая JSON данных, которые я запросил, но он все еще находится в строковой форме, а не типа, определенного в вызове get<>()
.
Что я здесь не так делаю? не должен ли он уже быть проанализирован?
Образец данных ответа A'la Network Tools в Chrome Dev Tools:
Образец тела ответа:
Снимок экрана Dev Tools со значением response
Бэкэнд (C #) отвечает следующим образом:
[HttpGet]
public JsonResult Vendors(bool showAll = false, int screenArea = 0)
{
var vendors = _commonBL.GetVendorsSlimForUser(UserModel, UserModel.CustomerId, showAll, screenArea);
return GetJson(vendors);
}
так было до миграции Http => HttpClient и работало с ONE JSON.parse()
Данные в обратной строке просто стандартные List<T>