В двух словах, у меня есть два класса и два производных класса. Производный класс имеет коллекцию, которая скрывает родительский класс. Несмотря на то, что метод Controller имеет родительский тип данных для параметра, Web API 2 создает производный тип данных для параметра и помещает Items
, отправленный клиентом, в скрытую коллекцию Items
.
Как мне правильно написать этот код для отправки данных, которые выглядят как производный класс, но получить к ним доступ как к типу данных родительского класса, или я неправильно использую ключевое слово new
? Родительские классы представляют таблицы базы данных. Производные классы заполняют подтверждающие данные о товарах в корзине. Я думаю, я мог бы создать два разных метода Controller и перегрузить их, но мне все равно любопытно, как это сделать правильно.
У меня есть следующие классы:
ShoppingListVM {
public int Id {get;set;}
public ICollection<ShoppingListItemVM> Items {get;set;}
}
ShoppingListItemVM {
public int Id {get;set;}
}
И производные классы:
ShoppingListExpandedVM : ShoppingListVM {
new public ICollection<ShoppingListItemExpanded> Items {get;set;}
}
ShoppingListItemExpandedVM : ShoppingListItemVM {
public string Name {get;set;} // Additional fields beyond ShoppingListItemVM above
}
Метод Controller выглядит следующим образом, в частности получает тип данных ShoppingListVM
.
public ShoppingListExpandedVM ShoppingListSave([FromBody] ShoppingListVM shoppingList) {
var myShoppingList = ShoppingListVM.Map( shoppingList);
_shoppingListService.Save( myShoppingList);
_db.SaveChanges();
}
Я отправляю данные с полями ShoppingListExpandedVM
с Items
с полями ShoppingListItemExpandedVM
. Параметр Controller ShoppingListVM shoppingList
показывает данные правильно, за исключением вложенного Items
, который является нулевым. Отладчик показывает два массива Items
, в которых тип данных ShoppingListItemExpandedVM
заполнен, а тип данных ShoppingListItemVM
пуст.