2014-10-05 22 views
7
wurde ein Zirkelverweis erkannt

Beim Konvertieren des Entitätsobjekts in JSON String ist ein Fehler aufgetreten. Ich benutze C# MVC4 mit Code zuerst DB-Design. Es liegt daran, dass FKs und Beziehungen zwischen Tabellen dieses Problem verursachen. Was wird die Problemumgehung sein?Entity zu JSON-Fehler - Beim Serialisieren eines Objekts vom Typ

Eine kreisförmige Referenz erkannt wurde, während ein Objekt vom Typ System.Data.Entity.DynamicProxies.User Serialisierung

mein Code

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

Antwort

16

Sein, weil es untergeordnete Objekte zu laden versucht, und es kann eine kreisförmige Schleife erstellen, die nie endet (a => b, b => c, c => d, d => a)

Sie können es nur für diesen bestimmten Moment wie folgt ausschalten.So dbcontext lädt keine Kunden ch ild Objekte, es sei denn Methode Fügen Sie auf Ihrem Objekt aufgerufen wird

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

Dank. Es funktioniert jetzt gut. Muss ich es später aktivieren? –

+0

Nein, Sie brauchen nicht –

+0

var response = client.PostAsync ("api/myController/myAction", neuer StringContent (neuer JavaScriptSerializer(). Serialize (Benutzer), Encoding.UTF8, "application/json")). Ergebnis; Ich stehe vor demselben Fehler, können Sie mir helfen, es zu lösen – Vijayaraghavan

0

ich das gleiche Problem haben, was ich getan habe ist vergangen haben nur benötigt Spalte zu sehen, In meinem meinem Fall. nur 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); 

Circular reference detected exception while serializing object to JSON

3

Mein Problem durch die Verwendung dieser gelöst:

//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); 
0

es versucht, Kind Objekte zu laden und es kann einige kreisförmige Loop-Eigenschaft werden schaffen, die niemals enden wird .

auch verwenden Sie [ScriptIgnore], die öffentliches Eigentum oder öffentlichen Bereich in diesem Blick nicht serialisiert werden: viel

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; }   
    }   
Verwandte Themen