上课:
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; } }
和控制器代码:
List<Parent> parents = parentRepository.Get(); return Json(parents);
它适用于LOCALHOST,但不适用于实时服务器:
错误: Json序列化类型的对象时检测到循环引用
我进行了搜索并找到了[ScriptIgnore]属性,因此将模型更改为
[ScriptIgnore]
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;} }
但是在实时服务器(win2008)上也会发生相同的错误。
如何避免该错误并成功序列化父数据?
尝试以下代码:
return Json( parents.Select(x => new { id = x.id, name = x.name, children = x.children.Select(y => new { // Assigment of child fields }) }));
…或者如果您仅需要父属性:
return Json( parents.Select(x => new { id = x.id, name = x.name }));
它并不是解决问题的真正方法,但在序列化DTO时是一种常见的解决方法。