una true serialize serializar referencia objeto isreference detectó c# json dto

c# - true - Json Se detectó una referencia circular al serializar un objeto de tipo



referencia circular sql (4)

Dar las clases:

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

Y el código del controlador:

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

Funciona en LOCALHOST, pero no funciona en el servidor en vivo:

ERROR: Json Se detectó una referencia circular al serializar un objeto de tipo

Hice una búsqueda y encontré el atributo [ScriptIgnore] , así que cambié el modelo a

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

Pero el mismo error ocurre en el servidor en vivo (win2008).

¿Cómo puedo evitar ese error y serializar los datos principales con éxito?


Estoy usando la solución, porque uso Knockout en las vistas MVC5.

En acción

return Json(ModelHelper.GetJsonModel<Core_User>(viewModel));

función

public static TEntity GetJsonModel<TEntity>(TEntity Entity) where TEntity : class { TEntity Entity_ = Activator.CreateInstance(typeof(TEntity)) as TEntity; foreach (var item in Entity.GetType().GetProperties()) { if (item.PropertyType.ToString().IndexOf("Generic.ICollection") == -1 && item.PropertyType.ToString().IndexOf("SaymenCore.DAL.") == -1) item.SetValue(Entity_, Entity.GetPropValue(item.Name)); } return Entity_; }


Podría usar este código y no usar la función de extensión de selección para filtrar su columna.

var list = JsonConvert.SerializeObject(Yourmodel, Formatting.None, new JsonSerializerSettings() { ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore }); return list;


Prueba el siguiente código:

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

... o si solo necesitas las propiedades padre:

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

Realmente no es la solución para el problema, pero es una solución común al serializar DTOs ...