C# 如何在ASP.NET核心MVC中正确返回嵌套的一对多数据?
我有一个C# 如何在ASP.NET核心MVC中正确返回嵌套的一对多数据?,c#,json,asp.net-core,json.net,asp.net-core-mvc,C#,Json,Asp.net Core,Json.net,Asp.net Core Mvc,我有一个MinionLeaders表,与Minions表有一对多关系。一个仆从可以领导n个仆从,如果没有任何成员,它也可以领导自己 问题是,当我试图获取一个成员为json的仆从领袖列表时,它返回一个无序的未完成json: [ { "LeaderID":"ABCD000000000001", "Name":"Foo", "Members":
MinionLeaders
表,与Minions
表有一对多关系。一个仆从可以领导n个仆从,如果没有任何成员,它也可以领导自己
问题是,当我试图获取一个成员为json的仆从领袖列表时,它返回一个无序的未完成json:
[
{
"LeaderID":"ABCD000000000001",
"Name":"Foo",
"Members":
[
{
"ID":"EEEE000000000001",
"Name":"Fubar",
"LeaderID":"ABCD000000000001"
此外,服务器还会抛出一个错误:
Newtonsoft.Json.JsonSerializationException: Self referencing loop detected for property 'minionLeader' with type 'rt5_app.Models.MinionLeaders'. Path '[0].Members[0]'.
如何正确返回数据
下面是我如何从数据库
MinionLeadersRepository.cs
获取数据的方法:
公共异步任务ListAsync()
{
return wait context.MinionLeaders.Include(p=>p.Members)
.ToListAsync();
}
ApiController.cs
:
公共异步任务ListAsync()
{
return wait_minionLeaders.ListAsync();
}
MinionLeadersModel.cs
公共类迷你领头人
{
[关键]
[秘书长(16)]
[MaxLength(16)]
公共字符串LeaderID{get;set;}
[秘书长(16)]
[MaxLength(16)]
公共字符串名称{get;set;}
公共虚拟列表成员{get;set;}
}
我发现这是一个序列化程序问题。
我通过在Startup.cs
services.AddMvc()
.AddJsonOptions(x=>x.SerializerSettings.ReferenceLoopHandling=Newtonsoft.Json.ReferenceLoopHandling.Ignore);
但我不确定这是真正的解决方案还是仅仅是一个解决办法