Asp.Net Web API 2.0,从 Get() 操作方法返回一个复杂的 object
Asp.Net Web API 2.0, Getting a complex object back from Get() action method
我有两种型号类ServiceProvider.cs & Club.cs
一个服务提供商可以有很多俱乐部。但是 ServiceProvider.cs
中有一个虚拟的 collection 俱乐部。如下图
public class ServiceProvider
{
public int ServiceProviderId { get; set; }
public string Name { get; set; }
public string Address { get; set; }
public string PhoneNo { get; set; }
public virtual ICollection<Club> Clubs { get; set; }
}
public class Club
{
public int ClubId { get; set; }
public string Name { get; set; }
public string Address { get; set; }
public virtual ServiceProvider serviceProvider { get; set; }
public int ServiceProviderId { get; set; }
}
我已经实施了存储库模式来查询 MS Sql 服务器,如果我 return 我的存储库 _serviceProvider
GetAll()
方法工作正常,我在 PostMan
.
中获得了所有服务提供商 objects
public IEnumerable<ServiceProvider> Get()
{
return _serviceProvider.GetAll();
}
但是如果我 return 存储库的 GetAllWithClubs()
方法然后我在这里得到 运行 时间异常。 问题是:我无法获得所有服务提供商及其俱乐部 collection。 但是,我已经调试了我的代码,然后再在这里提问,我得到了所有服务提供者及其俱乐部 collection 非常好。我确定从数据库中获取数据没问题,问题是从 Get() 操作方法发送回响应。
public IEnumerable<ServiceProvider> Get()
{
return _serviceProvider.GetAllWithClubs();
}
我进入 Postman 的错误是
在visual studio中的输出是
我已经 尝试在 GetAllWithClubs()
前面搜索 .toList()
的解决方案 加上 returning ActionResult
ActionResult
Asp.net 核心 2.1(我的案例 2.0 不支持)。我相信这不是一个重复的问题。
GetAll()
和 GetAllWithClubs()
方法的实现如下。
public IEnumerable<ServiceProvider> GetAllWithClubs()
{
return _context.ServiceProviders
.Include(c => c.Clubs);
}
在Repository.cs
public IEnumerable<T> GetAll()
{
return _context.Set<T>();
}
上面代码中的问题:是Json.net自引用循环检测和解决方案 是,我们必须 忽略循环引用而不是序列化它们 为了在 Asp.net MVC 2.0 中这样做,我们必须将这段代码放在 Startup.cs
.
services.AddMvc().AddJsonOptions(
options => options.SerializerSettings.ReferenceLoopHandling =
Newtonsoft.Json.ReferenceLoopHandling.Ignore);
重建,问题解决。
我有两种型号类ServiceProvider.cs & Club.cs
一个服务提供商可以有很多俱乐部。但是 ServiceProvider.cs
中有一个虚拟的 collection 俱乐部。如下图
public class ServiceProvider
{
public int ServiceProviderId { get; set; }
public string Name { get; set; }
public string Address { get; set; }
public string PhoneNo { get; set; }
public virtual ICollection<Club> Clubs { get; set; }
}
public class Club
{
public int ClubId { get; set; }
public string Name { get; set; }
public string Address { get; set; }
public virtual ServiceProvider serviceProvider { get; set; }
public int ServiceProviderId { get; set; }
}
我已经实施了存储库模式来查询 MS Sql 服务器,如果我 return 我的存储库 _serviceProvider
GetAll()
方法工作正常,我在 PostMan
.
public IEnumerable<ServiceProvider> Get()
{
return _serviceProvider.GetAll();
}
但是如果我 return 存储库的 GetAllWithClubs()
方法然后我在这里得到 运行 时间异常。 问题是:我无法获得所有服务提供商及其俱乐部 collection。 但是,我已经调试了我的代码,然后再在这里提问,我得到了所有服务提供者及其俱乐部 collection 非常好。我确定从数据库中获取数据没问题,问题是从 Get() 操作方法发送回响应。
public IEnumerable<ServiceProvider> Get()
{
return _serviceProvider.GetAllWithClubs();
}
我进入 Postman 的错误是
我已经 尝试在 GetAllWithClubs()
前面搜索 .toList()
的解决方案 加上 returning ActionResult
ActionResult
Asp.net 核心 2.1(我的案例 2.0 不支持)。我相信这不是一个重复的问题。
GetAll()
和 GetAllWithClubs()
方法的实现如下。
public IEnumerable<ServiceProvider> GetAllWithClubs()
{
return _context.ServiceProviders
.Include(c => c.Clubs);
}
在Repository.cs
public IEnumerable<T> GetAll()
{
return _context.Set<T>();
}
问题:是Json.net自引用循环检测和解决方案 是,我们必须 忽略循环引用而不是序列化它们 为了在 Asp.net MVC 2.0 中这样做,我们必须将这段代码放在 Startup.cs
.
services.AddMvc().AddJsonOptions(
options => options.SerializerSettings.ReferenceLoopHandling =
Newtonsoft.Json.ReferenceLoopHandling.Ignore);
重建,问题解决。