我有两个模型类。
Projects
:
public class Project
{
public Project()
{
}
[Key]
public int Id { get; set; }
public string Tag { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual List<Task> Tasks { get; set; }
}
还有Tasks
:
public class Task
{
public Task()
{
}
[Key]
public int Id { get; set; }
[ForeignKey("Project")]
public int ProjectId { get; set; }
public Project Project { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public Priority Priority { get; set; }
public int? StoryPoints { get; set; }
public DateTime? StartTime { get; set; }
public DateTime? EndTime { get; set; }
}
我有一个简单的ProjectController
和GetProjects
方法:
[HttpGet]
public IEnumerable<Project> GetProjects()
{
return context.Projects.Include(t => t.Tasks);
}
但是从这个GET
,我得到的东西看起来像这样:
如您所见,tasks
被切断。
但是当我删除Include
时:
[HttpGet]
public IEnumerable<Project> GetProjects()
{
return context.Projects;
}
一切正常:
但是,当然,我们没有任务。
我的问题是,如何使包含Tasks
的内容与.Net Core 2.1 WebApi
一起投影?那里发生了什么事?
PS。我尝试了ToList()
和IActionResult
的{{1}}和ObjectResponse
,它们的工作原理相同(剪切的任务和项目)。 Postman
无法从中得到任何东西,这就是为什么即时通讯使用chrome向您展示情况的原因
答案 0 :(得分:0)
问题解决了。您需要添加:
services.AddMvc().AddJsonOptions(options =>
{ options.SerializerSettings.ReferenceLoopHandling =
Newtonsoft.Json.ReferenceLoopHandling.Ignore; });
在您的Startup.cs
中,一切正常