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

关于.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日

悬赏问题

  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?