【发布时间】:2020-12-06 01:15:29
【问题描述】:
我有两个实体,扬声器和会话,其中扬声器可以是多个会话的一部分,会话可以有多个扬声器。我已将它们定义如下,并且我认为已成功为扬声器表播种(我相信它有效,因为链接表 SessionRecSpeakerRec 已按预期创建。
这是我的定义:
public class SessionRec
{
public int Id { get; set; }
public string Title { get; set; }
public virtual List<SpeakerRec> Sessions { get; set; }
}
public class SpeakerRec
{
public int Id { get; set; }
public string First { get; set; }
public string Last { get; set; }
public virtual List<SessionRec> Sessions { get; set; }
}
public DbSet<SessionRec> SessionRecs { get; set; }
public DbSet<SpeakerRec> SpeakerRecs { get; set; }
在我的 c# asp.net 控制器代码中,我这样做是为了获取带有会话的演讲者列表:
[HttpGet]
public IEnumerable<SpeakerRec> GetSpeakerRecs()
{
return _context.SpeakerRecs.Include(a=>a.Sessions).ToList();
}
我得到了循环错误。关于为什么以及如何解决的任何线索?
JsonException:检测到可能的对象循环。这既可以 是由于循环或物体深度大于最大值 允许深度为 32。考虑使用 ReferenceHandler.Preserve on 支持循环的 JsonSerializerOptions。
【问题讨论】:
-
这个问题与Entity Framework无关。任何两个相互有公共引用的对象都会发生这种情况。
-
您是否阅读过您发布的错误消息?它会在邮件末尾回答您的问题。
-
是的@Flater,我确实看到了,但不知道如何设置该选项。当我用谷歌搜索它时,我发现很多对 NewtonSoft 的引用,我认为它们在 .net 5 中已经过时了。
-
@PeterKellner 那是因为在 .Net 5 之前没有办法仅使用 System.Text.Json(即没有 Newtonsoft.Json)来处理这个问题。这个问题/答案可能更合适:stackoverflow.com/questions/60197270/…
标签: c# asp.net-core