当前位置: 首页 > 知识库问答 >
问题:

. Net Core 3.0可能的对象循环被检测到,不支持

冉俊德
2023-03-14

我有两个一对多相关的实体

public class Restaurant {
   public int RestaurantId {get;set;}
   public string Name {get;set;}
   public List<Reservation> Reservations {get;set;}
   ...
}
public class Reservation{
   public int ReservationId {get;set;}
   public int RestaurantId {get;set;}
   public Restaurant Restaurant {get;set;}
}

如果我尝试使用api获取预订餐厅

   var restaurants =  await _dbContext.Restaurants
                .AsNoTracking()
                .AsQueryable()
                .Include(m => m.Reservations).ToListAsync();
    .....

我收到错误响应,因为对象包含相互引用。有相关帖子建议创建单独的模型或添加NewtonsoftJson配置

问题是我不想创建单独的模型,第二个建议没有帮助。有没有办法在没有循环关系的情况下加载数据?*

System.Text.Json。JsonException:检测到不支持的可能对象循环。这可能是由于循环或对象深度大于System.Text.Json.ThrowHelper中允许的最大深度32。在System.Text.Json.JsonSerializer中,ThrowInvalidOperationException_SerializerCycledtected(Int32 maxDepth)。Write(Utf8JsonWriter writer、Int32 originalWriterDepth、Int32 flushThreshold、JSonSerializations选项、WriteStack

*

共有3个答案

仲孙阳
2023-03-14

仍然面临这个问题的人:检查您是否< code > await -了所有的异步方法。

仲璞瑜
2023-03-14

.NET Core 3.1安装软件包Microsoft.AspNetCore.Mvc。NewtonsoftJson(来自https://www.nuget.org/packages/Microsoft.AspNetCore.Mvc.NewtonsoftJson/ )

Startup.cs添加服务

services.AddControllers().AddNewtonsoftJson(options =>
    options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
);
夏元明
2023-03-14

我已经在一个新项目中尝试了你的代码,第二种方法似乎在安装Microsoft.AspNetCore.Mvc.NewtonsoftJson软件包后效果很好,首先是3.0。

services.AddControllersWithViews()
    .AddNewtonsoftJson(options =>
    options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
);

尝试一个新项目并比较差异。

 类似资料:
  • 问题内容: 我想用JAXB将我的pojo转换为json,我的pojo具有一对多的关系,当我将pojo转换为json时,JAXB会产生错误“在对象图中检测到一个循环。这将导致无限深的XML”。 我从网上读到,可以通过@XmlID和@XmlIDREF的帮助解决此问题,但是有一个问题,我的Id属性不是String类型,而是Long。据我所知,@ XmlID只能与String属性一起使用。 其他网站建议使

  • 问题内容: 运行以下代码时,出现此错误“主循环’builtin_function_or_method’对象不可迭代”: 我有搜索stackoverflow,但是找不到我的问题的答案… 我检查了错别字,但找不到任何错误。请帮我! 问题答案: 直接回答 在这里的代码中: 更改为。 如果您想进一步了解此错误,请阅读以下内容: 调试时,最好删除try … except块,尤其是“ expect Excep

  • 问题内容: 上课: 和控制器代码: 它适用于LOCALHOST,但不适用于实时服务器: 错误: Json序列化类型的对象时检测到循环引用 我进行了搜索并找到了属性,因此将模型更改为 但是在实时服务器(win2008)上也会发生相同的错误。 如何避免该错误并成功序列化父数据? 问题答案: 尝试以下代码: …或者如果您仅需要父属性: 它并不是解决问题的真正方法,但在序列化DTO时是一种常见的解决方法。

  • 问题内容: 我正在尝试做一个简单的JSON返回,但是我遇到以下问题。 我得到一个HTTP 500,但此问题的标题中显示了例外。我也试过 那也带来了同样的问题。 这是错误还是我的实现? 问题答案: 看来您的对象层次结构中有循环引用,而JSON序列化程序不支持。您是否需要所有列?您只能在视图中选择所需的属性: 这将使您的JSON对象更轻便,更易于理解。如果您有许多属性,则可以使用AutoMapper

  • 我有一个简单的类,如下所示: 但我收到以下错误消息: 检测到服务“App\Algorithm\Calculator”的循环引用,路径:“App\Algorithm\Calculator”- MatchService.php 问题是,但我到底做错了什么?