Json在序列化类型的对象时检测到循环引用

Exp*_* be 23 c# json dto

给课程:

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时这是一个常见的解决方法......