关于.net core(.net5.0) 返回值无限循环的问题

问题遇到的现象和发生背景

两个表 班级 学生 一对多 ,当我使用查找
查找出学生以及include 班级时 data里面就会有 学生信息-班级信息, 然后 班级信息里面又有学生信息 就这样一直无限循环, 返回json的时候就会错误,网上查找了一下 使用Microsoft.AspNetCore.Mvc.NewtonsoftJson 这个包,忽略循环 。但是json里面还是有点问题。以下是代码以及返回的值。

问题相关代码,请勿粘贴截图

学生表
public class Stu
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Stu_id { get; set; }

    Display(Name = "姓名")]
    public string Stu_name { get; set; }

    [Display(Name = "性别")]
    public string Stu_sex { get; set; }

    [Display(Name = "年龄")]
    public int Stu_age { get; set; }

    public int StuClass_id { get; set; }

    public Stuclass Stuclass { get; set; }
}

public class Stuclass
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Stuclass_id { get; set; }

    public string Stuclass_name { get; set; }

    public List<Stu> Stus { get; set; }
}

一对多关联
modelBuilder.Entity().HasOne(l => l.Stuclass).WithMany(l => l.Stus)
.HasForeignKey(l => l.StuClass_id);

运行结果及报错内容

测试

public async Task Ceshi()
{
var stu = await _context.Stus.Include(e=>e.Stuclass).ToListAsync();
return Json(stu);
}


json:

[
{
"stu_id": 1,
"stu_name": "张三",
"stu_sex": "男",
"stu_age": 16,
"stuClass_id": 1,
"stuclass": {
"stuclass_id": 1,
"stuclass_name": "网络一班",
"stus": [
{
"stu_id": 2,
"stu_name": "李四",
"stu_sex": "男",
"stu_age": 17,
"stuClass_id": 1
}
]
}
},
{
"stu_id": 2,
"stu_name": "李四",
"stu_sex": "男",
"stu_age": 17,
"stuClass_id": 1,
"stuclass": {
"stuclass_id": 1,
"stuclass_name": "网络一班",
"stus": [
{
"stu_id": 1,
"stu_name": "张三",
"stu_sex": "男",
"stu_age": 16,
"stuClass_id": 1
}
]
}
}
]

我的解答思路和尝试过的方法

其实可以新建一个model来赋值返回,有没有更好的办法呢?

我想要达到的结果

json:

[
{
"stu_id": 1,
"stu_name": "张三",
"stu_sex": "男",
"stu_age": 16,
"stuClass_id": 1,
"stuclass": {
"stuclass_id": 1,
"stuclass_name": "网络一班",
}
},
{
"stu_id": 2,
"stu_name": "李四",
"stu_sex": "男",
"stu_age": 17,
"stuClass_id": 1,
"stuclass": {
"stuclass_id": 1,
"stuclass_name": "网络一班",

    }
}

]

我之前写的也是新建一个Model,通过AutoMapper进行映射,目前也不知道有什么更好的方法。

如果不考虑调用班级类去查寻学生问题,可以这样给班级类增加忽略学生数组。
前提是增加了NewtonsoftJson循环引用。

Services.AddControllers().AddNewtonsoftJson(options =>
{
    options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; 
});

给属性增加JsonIgnore标签

 [JsonIgnore]
 public List<Students> Students { get; set; }

增加前

img

增加后

img