哭一样过 2022-04-14 17:23 采纳率: 100%
浏览 31
已结题

关于.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": "网络一班",

    }
}

]

  • 写回答

1条回答 默认 最新

  • 林一怂儿 前端领域新星创作者 2022-04-14 18:30
    关注

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

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

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

    给属性增加JsonIgnore标签

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

    增加前

    img

    增加后

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 4月23日
  • 已采纳回答 4月15日
  • 创建了问题 4月14日

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能