我最近在玩弄一个涉及返回对象图以便可以将它们读取为 JSON 的 Web API 项目时遇到了一个(希望如此)小问题。
任务对象示例 (通过 EF 生成) :
//A Task Object (Parent) can consist of many Activities (Child Objects)
public partial class Task
{
public Task()
{
this.Activities = new HashSet<Activity>();
}
public int TaskId { get; set; }
public string TaskSummary { get; set; }
public string TaskDetail { get; set; }
public virtual ICollection<Activity> Activities { get; set; }
}
在我的 ApiController 中,通过以下方式向我请求一个特定的任务(按 Id)及其所有相关的活动:
单任务请求示例
//Simple example of pulling an object along with the associated activities.
return repository.Single(t => t.Id == id).Include("Activities");
一切似乎都工作正常 - 但是当我尝试导航到 URL 以访问它时,例如/api/tasks/1
,该方法按应有的方式执行,但没有返回任何对象(只是一个简单的找不到该页面)。
如果我请求一个不包含活动的任务 - 一切都按预期工作,它会返回正确的 JSON 对象Activities : []
。
我确信有很多方法可以解决这个问题 - 我只是想我会了解人们认为处理这个问题的最佳方法。
考虑的方法(到目前为止):
使用替代的 JSON 解析器(例如 Newtonsoft.JSON)修复了该问题,但在整个返回数据中附加了 $id 和 $refs,我相信这可能会使 Knockout 的解析变得困难。
使用投影并利用匿名类型返回数据。(目前未测试)
完全删除包含并通过另一个请求简单地访问子数据。
任何和所有的建议将不胜感激。