Ниже приведены мои DTO.
public class Movie
{
public int Id {get; set;}
public string Name {get; set;}
public IEnumerable<BasicTicket> Tickets { get; set;}
}
Существует несколько типов билетов типа BasicTicket
public class BasicTicket
{
public int Id {get; set;}
public bool IsSpecial { get; set;}
public bool IsDicount{get; set;}
public decimal Price { get; set;}
}
1
public class SpecialTicket : BasicTicket
{
public string SpecialProp1 {get; set;} //n such properties where n could be the range of 2 to 10
}
2
public class DiscountTicket : BasicTicket
{
public string SomeProp1 {get; set;} //n such properties where n could be the range of 2 to 10
}
и т. Д.
Теперь на основе логического свойства, присутствующего в Movie, необходимо соответствующим образом инициализировать коллекцию Ticket.
Одна такая попытка: -
public IEnumerable<BasicTicket> Tickets {
get { return Tickets;}
set
{
if(this.IsSpecial)
{
value = new List<SpecialTicket >();
}
else
{
value = new List<BasicTicket>();
}
}
Но при этом, когда я отлаживаю, я не вижу никаких сообщений об ошибках, просто отладка останавливается
В действительности это все DTO для API. Так же попробовал это.
WebAPI Controller
public class MovieController : ControllerBase
{
public IActionResult Post([FromBody]Movie movie)
{
if(movie.IsSpecial)
{
var tickets = movie.Tickets;
movie.Tickets = new List<SpecialTicket>();
movie.Tickets = tickets; // Throws error or doesn't get the values of the props present in TicketSpecial
movie.Tickets = tickets;
}
}
private bool SomeMethod(IEnumerable<TicketSpecial> tickets)
{
}
}
Также хотел узнать, добавляются ли свойства вBasicTicket (если n = 2 или 3) на лету, используя ExpandoObject, было бы хорошо или нет?
Я думаю, что был бы какой-то шаблон проектирования, который бы правильно относился к созданию этого объекта, но пока ничего не нашел.
Спасибо!