web-dev-qa-db-ja.com

エンティティからjsonエラー-タイプのオブジェクトのシリアル化中に循環参照が検出されました

エンティティオブジェクトをJSON文字列に変換しようとしたときに次のエラーが発生しました。コードファーストDB設計でC#MVC4を使用しています。 FKとテーブル間の関係によってこの問題が発生するため、この問題が発生します。回避策は何ですか?

タイプSystem.Data.Entity.DynamicProxies.Userのオブジェクトのシリアル化中に循環参照が検出されました

私のコードは

  User ma = db.user.First(x => x.u_id == id);
  return Json(ma, JsonRequestBehavior.AllowGet);
12
user4111217

それは子オブジェクトをロードしようとしているため、終了しない循環ループを作成している可能性があるためです(a => b、b => c、c => d、d => a)

次のように、その特定の瞬間にのみオフにすることができます。したがって、オブジェクトでIncludeメソッドが呼び出されない限り、dbcontextは顧客の子オブジェクトをロードしません。

  db.Configuration.ProxyCreationEnabled = false;
  User ma = db.user.First(x => x.u_id == id);
  return Json(ma, JsonRequestBehavior.AllowGet);
28
kuma DK

私の問題はこれを使用して解決されます:

//initialize model db
testdbEntities dc = new testdbEntities();
//get employee details 
List<Employee1> lst = dc.Employee1.ToList(); 
//selecting the desired columns
var subCategoryToReturn = lst.Select(S => new {
    Employee_Id = S.Employee_Id,
    First_Name = S.First_Name,
    Last_Name = S.Last_Name,
    Manager_Id = S.Manager_Id
});
//returning JSON
return this.Json(subCategoryToReturn , JsonRequestBehavior.AllowGet);
5
Ashish

私は同じ問題を抱えていましたが、私の場合、表示するのに必要な列のみが渡されました。 2つだけ。

List<SubCategory> lstSubCategory = GetSubCateroy() // list from repo

 var subCategoryToReturn = lstSubCategory.Select(S => new { Id  = S.Id, Name = S.Name }); 

return this.Json(subCategoryToReturn , JsonRequestBehavior.AllowGet);

オブジェクトをJSONにシリアル化しているときに循環参照が例外を検出しました

0
BJ Patel

クエリの内容を保持するクラスを作成してみませんか?それは私のために働いた

0
Flipponachi

子オブジェクトをロードしようとしていますが、終了しない循環ループプロパティが作成されている可能性があります。

また、あなたは[ScriptIgnore]を使用し、これを見てパブリックプロパティまたはパブリックフィールドをシリアル化しません:

   public class BookingHotel : IntBaseEntity            
    {    
        public string BookingName { get; set; }    
        public string BookingReference { get; set; }    
        public DateTime? CheckInDate { get; set; }    
        public DateTime? CheckOutDate { get; set; }    
        public int HotelId { get; set; }    
        [ScriptIgnore]    
        public Hotel Hotel { get; set; }        
     }         
0
ABlue