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...
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With