两个表 班级 学生 一对多 ,当我使用查找
查找出学生以及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; }
增加前
增加后