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