EF4 CTP5を介して返されたオブジェクトをシリアル化しようとすると、循環参照に問題が発生します。私のモデルには、コードファーストアプローチと単純なpocoを使用しています。
オブジェクトへの逆参照を提供するプロパティに[ScriptIgnore]属性を追加しましたが、pocoを手動でインスタンス化すると、厄介なことにすべてが正常に機能するようです。つまり、JSONに正常にシリアル化され、scriptignore属性が確認されます。ただし、DALから返されたオブジェクトをシリアル化しようとすると、循環参照例外が発生します。「タイプ'System.Data.Entity.DynamicProxies.xxxx'のオブジェクトのシリアル化中に循環参照が検出されました。」
私はデータを取得するいくつかの方法を試しましたが、それらはすべてこのエラーで立ち往生しています:
public JsonResult GetTimeSlot(int id) {
TimeSlotDao tsDao = new TimeSlotDao();
TimeSlot ts = tsDao.GetById(id);
return Json(ts);
}
以下の方法は、タイムスロットの動的プロキシオブジェクトが予定オブジェクトの循環参照を引き起こすのではなく、わずかにうまく機能します。
public JsonResult GetTimeSlot(int id) {
TimeSlotDao tsDao = new TimeSlotDao();
var ts = from t in tsDao.GetQueryable()
where t.Id == id
select new {t.Id, t.StartTime, t.Available, t.Appointment};
return Json(ts);
}
この問題に対するアイデアや解決策はありますか?
更新 可能であれば、すぐに使用できるシリアライザーを使用したいと思いますが、代わりにnuget経由のJson.Netでも問題ありませんが、意図したとおりに使用できることを願っています...