Entity framework JSON序列化程序返回n^2预期条目数

Entity framework JSON序列化程序返回n^2预期条目数,entity-framework,serialization,asp.net-web-api,json.net,entity-framework-core,Entity Framework,Serialization,Asp.net Web Api,Json.net,Entity Framework Core,我有一个API,它产生了一些有趣的结果。调试时,在序列化之前,一切都按预期进行 ScheduleEvent实体具有项目实体的外键。我正在尝试返回与给定id匹配的所有ScheduleEvents 当我运行下面的时,它返回正确的结果,但是如果它应该返回10个条目,它将返回10^2(正确的结果重复10次) 最初,下面的命令导致自引用循环检测到错误。我添加了以下解决错误的方法 services.AddMvc().AddJsonOptions(options => { //options.S

我有一个API,它产生了一些有趣的结果。调试时,在序列化之前,一切都按预期进行

ScheduleEvent实体具有项目实体的外键。我正在尝试返回与给定id匹配的所有ScheduleEvents

当我运行下面的时,它返回正确的结果,但是如果它应该返回10个条目,它将返回10^2(正确的结果重复10次)

最初,下面的命令导致自引用循环检测到错误。我添加了以下解决错误的方法

services.AddMvc().AddJsonOptions(options =>
{
    //options.SerializerSettings.NullValueHandling = 
    //              Newtonsoft.Json.NullValueHandling.Include;

    options.SerializerSettings.ReferenceLoopHandling = 
                  Newtonsoft.Json.ReferenceLoopHandling.Ignore;
});
如果我运行以下命令,它将按预期输出

return Ok(await _context.Project.Include(p => p.ScheduleEvents)
               .Where(x => x.ProjectName == id).ToListAsync());
模型的代码:

项目

public class Project
{
    [Key]
    public int ProjectId { get; set; }
    public string ProjectName { get; set; }

    ...

    public ICollection<ScheduleEvent> ScheduleEvents { get; set; } = null;
}
public class ScheduleEvent
{
    [Key]
    [JsonProperty("ScheduleEventId")]
    public int ScheduleEventId { get; set; }

    ...

    [Display(Name = "Project")]
    [JsonProperty("Project")]
    [ForeignKey("ProjectForeignKey")]
    public virtual Project Project { get; set; } = null;
}

您可能需要设置
ProxyCreationEnabled=false
。请参阅,您能否显示模式类的“代码”?您可能需要设置
ProxyCreationEnabled=false
。查看并显示模式类的“代码”吗?
public class ScheduleEvent
{
    [Key]
    [JsonProperty("ScheduleEventId")]
    public int ScheduleEventId { get; set; }

    ...

    [Display(Name = "Project")]
    [JsonProperty("Project")]
    [ForeignKey("ProjectForeignKey")]
    public virtual Project Project { get; set; } = null;
}