给课程:
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; }
}
Run Code Online (Sandbox Code Playgroud)
和控制器代码:
List<Parent> parents = parentRepository.Get();
return Json(parents);
Run Code Online (Sandbox Code Playgroud)
它适用于LOCALHOST,但它不适用于实时服务器:
错误:Json序列化类型的对象时检测到循环引用
我做了一个搜索并找到了[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;}
}
Run Code Online (Sandbox Code Playgroud)
但是在实时服务器上会出现同样的错误(win2008).
如何避免该错误并成功序列化父数据?
RMa*_*lke 47
请尝试以下代码:
return Json(
parents.Select(x => new {
id = x.id,
name = x.name,
children = x.children.Select(y => new {
// Assigment of child fields
})
}));
Run Code Online (Sandbox Code Playgroud)
...或者如果您只需要父属性:
return Json(
parents.Select(x => new {
id = x.id,
name = x.name
}));
Run Code Online (Sandbox Code Playgroud)
它不是问题的解决方案,但在序列化DTO时这是一个常见的解决方法......