Expert wanna be Expert wanna be - 2 months ago 37
C# Question

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

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?

Answer

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
        })
    })); 

Only 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...