Я пытаюсь отправить клиенту angular сложный объект. Класс объекта выглядит следующим образом:
public class ProductListModel
{
public int TotPages { get; set; } = 1;
public int CurPage { get; set; } = 1;
public long CatId { get; set; } = -1;
public string Search { get; set; } = "";
public string Title = "";
public Category[] Categories;
public Product[] Products;
public bool HasCarousel { get; set; }
public bool Discounted { get; set; } = false;
}
Я определил интерфейс в angular так же, как и класс:
interface ProductListModel {
totPages: number;
curPage: number;
catId: number;
search: string;
title: string;
hasCarousel: boolean;
discounted: boolean;
categories: Category[];
products: Product[];
}
Тогда у меня в контроллере API:
[HttpGet]
[Route(nameof(GetProducts))]
public ProductListModel GetProducts(int curPage = 1, long catId= -1, bool discounted = false, string search="")
{
// uSession.LastUserUrl = Request.PathBase + Request.Path + Request.QueryString;
var plm = new ProductListModel();
int prodPerPage = 10;
IQueryable<Product> qp;
if (search != "")
{
plm.Title = "Found Products";
qp = dbContext.Products.Where(p => p.Active && p.Name.Contains(search)).OrderBy(p => p.Name);
}
else
if(discounted)
{
plm.Title = "Discounted Products";
qp = dbContext.Products.Where(p => p.Active && p.DiscountPerc>0).OrderBy(p => p.Name);
}
else
{
long catIdNone = dbContext.Categories.Where(c => c.Name == "_None").FirstOrDefault().Id;
if (catId == -1 || catId == catIdNone)
{
plm.Title = "All Products";
qp = dbContext.Products.Where(p => p.Active).OrderBy(p => p.Name);
}
else
{
var catName = dbContext.Categories.Where(c => c.Id == catId).FirstOrDefault().Name;
plm.Title = "Category: " + catName;
qp = dbContext.Products.Where(p => p.Active).Where(p => p.CategoryId == catId).OrderBy(p => p.Name);
}
}
int totPages = (int)Math.Ceiling((decimal)qp.Count() / prodPerPage);
if (qp!=null)
{
plm.Products = qp.Skip((curPage - 1) * prodPerPage).Take(prodPerPage).ToArray();
}
var catl = dbContext.Categories.OrderBy(c => c.Name).ToArray();
if (catl!=null)
{
plm.Categories = catl;
}
plm.CatId = catId;
plm.CurPage = curPage;
plm.TotPages = totPages;
plm.HasCarousel = (catId == -1) && (!discounted);
plm.Discounted = discounted;
plm.Search = search;
return plm;
}
И, наконец, вызов angular:
http.get<ProductListModel>(baseUrl + 'api/ajax/GetProducts').subscribe(result => {
this.ProductListModel = result;
console.log(result);
}, error => console.error(error));
, но я получаю только свойства, не являющиеся массивами, продукты и категории массивов даже не присутствуют в результате. В Почтальоне я получаю тот же результат, см. Скриншот. Почему это происходит и какое решение вы предлагаете. Спасибо