Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Json A circular reference was detected while serializing an object of type

Tags:

Give the classes:

public class Parent {     public int id {get; set;}     public int name {get; set;}      public virtual ICollection<Child> children {get; set;} }  [Table("Child")] public partial class Child {     [Key]     public int id {get; set;}     public string name { get; set; }      [NotMapped]     public string nickName { get; set; } } 

And the controller code:

List<Parent> parents = parentRepository.Get(); return Json(parents);  

It works on LOCALHOST, but it does not work on live server:

ERROR : Json A circular reference was detected while serializing an object of type

I did a search and found the [ScriptIgnore] attribute, so I changed the model to

using System.Web.Script.Serialization;  public class Parent {     public int id {get; set;}     public int name {get; set;}      [ScriptIgnore]     public virtual ICollection<Child> children {get; set;} } 

But the same error occur on live server (win2008).

How can I avoid that error and serialize the parent data successfully?

like image 593
Expert wanna be Avatar asked Jan 29 '13 21:01

Expert wanna be


2 Answers

Try the following code:

return Json(     parents.Select(x => new {         id = x.id,         name = x.name,         children = x.children.Select(y => new {             // Assigment of child fields         })     }));  

...or if you only need the parent properties:

return Json(     parents.Select(x => new {         id = x.id,         name = x.name     }));  

It is not really the solution for the problem, but it is a common workaround when serializing DTOs...

like image 133
RMalke Avatar answered Oct 04 '22 13:10

RMalke


I had a similar issue and likewise i was not able to resolve the underlying issue. I figure the server is using a dll different from localhost for the conversion to json via json.encode.

I did post the question and my resolution here A circular reference was detected while serializing with Json.Encode

I resolved with mvchelper.

like image 43
David Avatar answered Oct 04 '22 14:10

David