原諒我,如果這已被問及;經過幾次搜索後我找不到任何東西:迭代未知的IQueryable屬性?
我正在嘗試在MVC中編寫ActionFilter,它將「攔截」IQueryable並在運行時取消所有父子關係。我這樣做是因爲Linq沒有正確序列化對象,如果他們有父 - 子關係(由於父引用的是父引用的子引用等引發的循環引用錯誤),我需要該對象序列化爲Json進行Ajax調用。我試圖在DBML文件中標記具有內部隱私狀態的子關係,並在修復序列化問題的同時,還在頁面呈現時從視圖引擎中隱藏子成員,導致引發另一個錯誤。所以,通過解決一個問題,我會造成另一個問題。
解決這兩個問題的唯一方法是在返回序列化之前手動將子成員設置爲null,但我試圖避免這樣做,因爲它很麻煩,不可重用等。我寧願使用ActionFilter檢查正在序列化的IQueryable,並使用Type of EntitySet(表示外鍵/關聯如何表示)取消任何成員。但是,我對Reflection沒有太多經驗,並且找不到任何示例來說明如何執行此類操作。所以...這可能與反思?有沒有更好的方法來完成同樣的事情?明天當我回到工作計算機時,我會發布相關代碼。
感謝,
丹尼爾
如所承諾的,代碼:
[GridAction]
public ActionResult _GetGrid()
{
IQueryable<Form> result = formRepository.GetAll();
foreach (Form f in result)
{
f.LineItems = null;
f.Notes = null;
}
return View(new GridModel<Form> { Data = result });
}
一個額外的皺紋是,我使用的新Telerik的MVC擴展,所以我實際上並不是實際序列化Json - 我只是在IGridModel中返回IQueryable,而其餘的部分則是動作過濾器[GridAction]。