如何在Asp.Net web api中返回深层序列化对象(具有复杂类型属性)?

时间:2013-04-10 06:48:46

标签: .net serialization asp.net-web-api odata wcf-web-api

我有下一堂课:

public class Event
{
   public int Id { get; set; }
   public string Title { get; set; }
   public string Description { get; set; }
   public List<ImageLink> Images { get; set; }
}

public class ImageLink
{
   public int Id { get; set; }
   public string Url { get; set; }
}

我的行动:

public IQueryable<Event> GetEvents()
{
    var events = EventsRepository.Events.AsQueryable();
    return events;
}

EventsRepository.Events - 返回包含许多imageslink的事件,但在brouser中我没有看到它们:

 "odata.metadata":"http://localhost:28286/odata/$metadata#Events","value":[
    {
      "Title":"Title", 
      "Description":"Description"
    },...

我知道Odata有$扩展选项,但似乎还没有支持。 如何强制我的应用程序返回深度可序列化对象?因为我想在我的客户端获取所有包含的数据。

1 个答案:

答案 0 :(得分:2)

如果ImageLink被建模为复杂类型,则Event的响应有效负载将包含ImageLink内联。您可以告诉模型构建器使用

将ImageLink映射为复杂类型
modelBuilder.ComplexType<ImageLink>();

这样做的正确方法是使用$ expand。我们现在正在使用$ select和$ expand支持,并且应该在下周初的夜间构建中使用工作位。