私は最近、オブジェクトグラフを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 : []
。
この問題に取り組む方法はたくさんあると確信しています。私は、人々がこれを処理するための最良の方法をどのように考えているかについて、ある程度の洞察を得るだろうと思っていました。
考慮される方法(これまでのところ):
問題を修正したが、戻りデータ全体に$idと$refを追加した代替のJSONパーサー(Newtonsoft.JSONなど)を使用すると、Knockoutの解析が困難になる可能性があると思います。
射影を使用し、匿名型を利用してデータを返します。(これまでのところテストされていません)
インクルードを完全に削除し、別のリクエストを介して子データにアクセスするだけです。
ありとあらゆる提案をいただければ幸いです。