无法序列化System.Linq.IQueryable接口
本文关键字:IQueryable 接口 Linq System 序列化 | 更新日期: 2023-09-27 18:09:37
当我尝试在web服务中运行我的方法时,我遇到了一个错误,"Cannot serialize interface System.Linq.IQueryable."我的班级是这样的:
public class AirlineSearchStrong
{
public Flight_Schedule flightSchedule { get; set; }
public Flight_Schedule_Seats_and_Price flightScheduleAndPrices { get; set; }
public Airline airline { get; set; }
public Travel_Class_Capacity travelClassCapacity { get; set; }
}
[WebMethod]
public IQueryable SearchFlight(string dep_Date, string dep_Airport, string arr_Airport, int no_Of_Seats)
{
AirlineLinqDataContext db = new AirlineLinqDataContext();
var query = (from fs in db.Flight_Schedules
join fssp in db.Flight_Schedule_Seats_and_Prices on fs.flight_number equals fssp.flight_number
join al in db.Airlines on fs.airline_code equals al.airline_code
join altc in db.Travel_Class_Capacities on al.aircraft_type_code equals altc.aircraft_type_code
where fs.departure_date == Convert.ToDateTime(dep_Date)
where fs.origin_airport_code == dep_Airport
where fs.destination_airport_code == arr_Airport
where altc.seat_capacity - fssp.seats_taken >= no_Of_Seats
select new AirlineSearchStrong {
flightSchedule = fs,
flightScheduleAndPrices = fssp,
airline = al,
travelClassCapacity = altc
});
return query;
}
我试过IQueryable, IList和返回。tolist(),但大部分都是不成功的
我不这么认为你可以使用Iqueryable或Ienumerable,因为它们都是惰性执行,并且不可序列化。只有在遍历集合时才执行查询。因此,将查询返回给调用者并要求他迭代作为结束是没有意义的。您需要通过List
或Array
。
您可能需要将返回类型更改为List<Type>
public IEnumerable<AirlineSearchStrong> SearchFlight(string dep_Date, string dep_Airport, string arr_Airport, int no_Of_Seats)
{
...
return query.ToList();
}
你试图序列化数据的表示,linq查询本身,而不是执行查询产生的数据,这就是为什么它不起作用
您需要将linq查询枚举到一个可枚举集合中,并将其序列化。
AirlineSearchStrong
可能需要标记为[Serializable()]