一尘不染

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

json

上课:

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]属性,因此将模型更改为

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)上也会发生相同的错误。

如何避免该错误并成功序列化父数据?


阅读 329

收藏
2020-07-27

共1个答案

一尘不染

尝试以下代码:

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时是一种常见的解决方法。

2020-07-27