我有一个这样的方法按预期工作。
[WebGet]
public IQueryable<BuildJobModel> GetCustomers()
{
var context = new MyDataContext(); // ADO.NET Entity Data Model
var query = from c in context.Customers
select new CustomerModel {
Id = c.Id,
Name = c.Name
};
return query;
}
但是当我尝试创建这样一个更复杂的查询时,它不起作用。
[WebGet]
public IQueryable<BuildJobModel> GetCustomers()
{
var context = new MyDataContext(); // ADO.NET Entity Data Model
var query = from c in context.Customers
select new CustomerModel {
CustomerId = c.CustomerId,
Name = c.Name,
Orders = from o in c.Orders
select new OrderModel {
OrderId = o.OrderId,
Details = o.Details
}
};
return query;
}
模型看起来像这样:
public class CustomerModel
{
public int CustomerId { get; set; }
public string Name { get; set; }
public IEnumerable<OrderModel> Orders { get; set; }
}
public class OrderModel
{
public int OrderId { get; set; }
public string Details { get; set; }
}
例外:
无法序列化类型为System.Collections.Generic.IEnumerable`1 [[Proj.OrderModel,Proj,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]]的成员Proj.CustomerModel.Logs,因为它是一个接口
我的目标:
答案 0 :(得分:0)
我强烈建议不将IQueryable
公开为WCF服务的返回类型。
理想情况下,如果要返回集合,请使用数组或通用列表。
关于目标列表:
IQueryable
接口与嵌套数据有什么关系。更新:查看WCF Data Services - 可能会做您想做的事。
答案 1 :(得分:0)
如果您尝试返回JSON:JsonFormatter中的构建无法(de)序列化接口。您应该从WebApiContrib尝试JSON.NET Formatter。
答案 2 :(得分:0)
我认为你只需要使用一个数组而不是IEnumerable,就像这样......
public class CustomerModel
{
public int CustomerId { get; set; }
public string Name { get; set; }
public OrderModel[] Orders { get; set; }
}
public class OrderModel
{
public int OrderId { get; set; }
public string Details { get; set; }
}
如果您将其序列化为json / xml,我怀疑内置序列化程序不知道如何处理IEnumerable。