.net核心:不完整的JSON响应

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)


moj*_*nco 9

我在一个项目中遇到了这个问题。这是由自引用循环引起的。

您需要创建某种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)

然后,您的用户映射UserSport模型,你UserDtoSportDto 一个很好的工具,这样做的映射是AutoMapper。您可以阅读文档以了解入门方法。

映射完成后,您将DTO发送为JSON而不是模型