Nic*_*s B 15 c# asp.net-core-mvc .net-core asp.net-core
我正在尝试构建简单的API用于培训,在我的数据库中我获得了用户(名字,姓氏,电子邮件密码list<sports>)和体育(名称,用户ID).一切都没关系,当我想要获得我的用户时,我得到了一个填充了体育的对象.但是JSON响应是不完整的,它在中间被"切断".
[{"firstName":"Nicolas","lastName":"Bouhours","email":"n.bouh@test.com","password":"nico@hotmail.fr","sports":[{"name":"Trail","userId":1
Run Code Online (Sandbox Code Playgroud)
这是我的控制器:
// GET: api/Users
[HttpGet]
public IEnumerable<User> GetUsers()
{
var users = _context.Users.Include(u => u.Sports).ToList();
return users;
}
Run Code Online (Sandbox Code Playgroud)
我的模特:
public class Sport : BaseEntity
{
public string Name { get; set; }
public int UserId { get; set; }
public User User { get; set; }
}
public class User : BaseEntity
{
public String FirstName { get; set; }
public String LastName { get; set; }
public String Email { get; set; }
public String Password { get; set; }
public List<Sport> Sports { get; set; }
}
public class SportAppContext : DbContext
{
public SportAppContext(DbContextOptions<SportAppContext> options) : base(options)
{ }
public DbSet<User> Users { get; set; }
public DbSet<Sport> Sports { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如果你有任何想法,我真的不明白发生了什么
Ama*_*duh 16
我现在正遇到同样的问题.您还可以更改JSON序列化/配置设置以忽略自引用循环,如此问题的已接受答案中所示
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().AddJsonOptions(options => {
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
});
}
Run Code Online (Sandbox Code Playgroud)
我在一个项目中遇到了这个问题。这是由自引用循环引起的。
您需要创建某种DTO(数据传输对象),该DTO将用于生成JSON。
在您的DTO中,您删除了逆关系,因此您最终遇到了类似
public class SportDto
{
public string Name { get; set; }
}
public class UserDto
{
public String FirstName { get; set; }
public String LastName { get; set; }
public String Email { get; set; }
public String Password { get; set; }
public List<SportDto> Sports { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后,您的用户映射User和Sport模型,你UserDto和SportDto
一个很好的工具,这样做的映射是AutoMapper。您可以阅读文档以了解入门方法。
映射完成后,您将DTO发送为JSON而不是模型。
| 归档时间: |
|
| 查看次数: |
4571 次 |
| 最近记录: |