public async Task <IEnumerable <ItineraryObject> > GetObjectsList(string origin, string destination, string outboundDate, string inboundDate, string amountOfPassengers, string travelClass, string currency) { origin = GetIata(origin); destination = GetIata(destination); var rootObj = await GetData(origin, destination, outboundDate, inboundDate, amountOfPassengers, travelClass, currency); if (rootObj == null) { return(null); } var rootObjCount = rootObj.results.Count; var outboundLegs = new List <IndividualFlightOutbound>(); var inboundLegs = new List <IndividualFlightInbound>(); itineraries.Clear(); for (int i = 0; i < rootObjCount; i++) { outboundLegs.Clear(); inboundLegs.Clear(); var flightsCountOutbound = rootObj.results[i].itineraries[0].outbound.flights.Count; var getFlightsOutbound = rootObj.results[i].itineraries[0].outbound.flights; for (int u = 0; getFlightsOutbound.Count > u; u++) { var indOutbound = getFlightsOutbound[u]; outboundLegs.Add( new IndividualFlightOutbound() { originInd = indOutbound.origin.airport, destinationInd = indOutbound.destination.airport, travel_class = indOutbound.booking_info.travel_class, flight_number = indOutbound.flight_number, booking_code = indOutbound.booking_info.booking_code, aircraft = indOutbound.aircraft, arrives_at = indOutbound.arrives_at, departs_at = indOutbound.departs_at, seats_remaining = indOutbound.booking_info.seats_remaining, marketing_airline = indOutbound.marketing_airline, operating_airline = indOutbound.operating_airline, orderPos = u, terminalOrg = indOutbound.origin.terminal, terminalDes = indOutbound.destination.terminal, duration = _tzService.GetDuration(indOutbound.origin.airport, indOutbound.destination.airport, indOutbound.departs_at.Split("T")[0] + " " + indOutbound.departs_at.Split("T")[1], indOutbound.arrives_at.Split("T")[0] + " " + indOutbound.arrives_at.Split("T")[1]) }); } if (inboundDate != null) { var flightsCountInbound = rootObj.results[i].itineraries[0].inbound.flights.Count; var getFlightsInbound = rootObj.results[i].itineraries[0].inbound.flights; for (var c = 0; getFlightsInbound.Count > c; c++) { var indInbound = getFlightsInbound[c]; inboundLegs.Add( new IndividualFlightInbound() { originInd = indInbound.origin.airport, destinationInd = indInbound.destination.airport, travel_class = indInbound.booking_info.travel_class, flight_number = indInbound.flight_number, booking_code = indInbound.booking_info.booking_code, aircraft = indInbound.aircraft, arrives_at = indInbound.arrives_at, departs_at = indInbound.departs_at, seats_remaining = indInbound.booking_info.seats_remaining, marketing_airline = indInbound.marketing_airline, operating_airline = indInbound.operating_airline, orderPos = c, terminalOrg = indInbound.origin.terminal, terminalDes = indInbound.destination.terminal, duration = _tzService.GetDuration(indInbound.origin.airport, indInbound.destination.airport, indInbound.departs_at.Split("T")[0] + " " + indInbound.departs_at.Split("T")[1], indInbound.arrives_at.Split("T")[0] + " " + indInbound.arrives_at.Split("T")[1]) }); } itineraries.Add( new ItineraryObject() { Id = Guid.NewGuid().ToString(), AmountOfPassengers = Int32.Parse(amountOfPassengers), originAirportOutbound = getFlightsOutbound[0].origin.airport, originAirportInbound = getFlightsInbound[0].origin.airport, departureTimeOutbound = getFlightsOutbound[0].departs_at, departureTimeInbound = getFlightsInbound[0].departs_at, arrivalAirportOutbound = getFlightsOutbound[flightsCountOutbound - 1].destination.airport, arrivalAirportInbound = getFlightsInbound[flightsCountInbound - 1].destination.airport, arrivalTimeOutbound = getFlightsOutbound[getFlightsOutbound.Count - 1].arrives_at, arrivalTimeInbound = getFlightsInbound[getFlightsInbound.Count - 1].arrives_at, tripDurationOutbound = rootObj.results[i].itineraries[0].outbound.duration, tripDurationInbound = rootObj.results[i].itineraries[0].inbound.duration, layoverStopAmountOutbound = (flightsCountOutbound - 1).ToString(), layoverStopAmountInbound = (flightsCountInbound - 1).ToString(), layoverCitiesOutbound = GetLayoverCitiesOutbound(rootObj, i), layoverCitiesInbound = GetLayoverCitiesInbound(rootObj, i), fareClass = getFlightsOutbound[0].booking_info.travel_class, farePriceTotal = rootObj.results[i].fare.total_price, farePriceTax = rootObj.results[i].fare.price_per_adult.tax, fareCurrency = rootObj.currency, farePricePerPassenger = rootObj.results[i].fare.price_per_adult.total_fare, IndFlightOutbound = new List <IndividualFlightOutbound>(outboundLegs) .OrderBy(o => o.orderPos).ToList(), IndFlightInbound = new List <IndividualFlightInbound>(inboundLegs).OrderBy(o => o.orderPos) .ToList() }); } else { itineraries.Add( new ItineraryObject() { Id = Guid.NewGuid().ToString(), AmountOfPassengers = Int32.Parse(amountOfPassengers), originAirportOutbound = getFlightsOutbound[0].origin.airport, departureTimeOutbound = getFlightsOutbound[0].departs_at, arrivalAirportOutbound = getFlightsOutbound[flightsCountOutbound - 1].destination.airport, arrivalTimeOutbound = getFlightsOutbound[getFlightsOutbound.Count - 1].arrives_at, tripDurationOutbound = rootObj.results[i].itineraries[0].outbound.duration, layoverStopAmountOutbound = (flightsCountOutbound - 1).ToString(), layoverCitiesOutbound = GetLayoverCitiesOutbound(rootObj, i), fareClass = getFlightsOutbound[0].booking_info.travel_class, farePriceTotal = rootObj.results[i].fare.total_price, farePriceTax = rootObj.results[i].fare.price_per_adult.tax, fareCurrency = rootObj.currency, farePricePerPassenger = rootObj.results[i].fare.price_per_adult.total_fare, IndFlightOutbound = new List <IndividualFlightOutbound>(outboundLegs) .OrderBy(o => o.orderPos).ToList() }); } } return(new FlightObjectsList(itineraries)); }