JsonResult不打印反对返回

时间:2017-03-21 17:44:56

标签: asp.net asp.net-core

我试图在我的控制器中发送一个json响应,但它没有发送我作为参数传递的所有内容。我从EF获取对象并将其存储在var中并返回Json(cardsList)。

从EF获取数据的方法。

public Task<List<Card>> AllCardsAsync()

我的控制器方法声明是:

[HttpGet("cards")]
    public async Task<JsonResult> Get()
    {
        var cards = await _unitOfWork.CardRepository.AllCardsAsync();
        return Json(cards);
    }

Card.cs定义是

 public partial class Card
{
    public Card()
    {
        Archive = new HashSet<Archive>();
        Owns = new HashSet<Owns>();
    }

    public int Id { get; set; }
    public string Name { get; set; }
    public string Representation { get; set; }
    public int ActionId { get; set; }
    public int CoordinatorId { get; set; }

    public virtual ICollection<Archive> Archive { get; set; }
    public virtual ICollection<Owns> Owns { get; set; }
    public virtual Action Action { get; set; }
    public virtual Coordinator Coordinator { get; set; }

  }

当我进行debbug时,cardsList有3个元素和更多信息,但是我在浏览器中得到的结果是只有1个元素的数组和更少的信息。

提前致谢 [UPDATE] Action.cs和Coordinator.cs

public partial class Action
{
    public Action()
    {
        Call = new HashSet<Call>();
        Card = new HashSet<Card>();
        SendCoordinates = new HashSet<SendCoordinates>();
    }

    public int Id { get; set; }
    public int? ActionTypeId { get; set; }

    public virtual ICollection<Call> Call { get; set; }
    public virtual ICollection<Card> Card { get; set; }
    public virtual ICollection<SendCoordinates> SendCoordinates { get; set; }
    public virtual ActionType ActionType { get; set; }
}


 public partial class Coordinator
{
    public Coordinator()
    {
        Card = new HashSet<Card>();
        Owns = new HashSet<Owns>();
    }

    public int Id { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Card> Card { get; set; }
    public virtual ICollection<Owns> Owns { get; set; }
   }

1 个答案:

答案 0 :(得分:1)

如果您没有为EF禁用延迟加载,则您的集合属性将为空(默认情况下),因此当您序列化它们时,它们将不会显示。你需要在获取结果时手动.Include()它们,并禁用延迟加载,以便它们急于加载。

更好的方法是定义自己的ViewModel类型 - 通常不希望将数据模型类型公开为API模型。然后,您可以根据需要填充它并将其展平或以其他方式重新构建它以针对HTTP客户端(而不是数据库客户端)优化它。您可以创建自己的自定义ViewModel类型并手动填充它(只是实例化它并设置其属性),看看是否正确地序列化了。然后使用LINQ投影(例如.Select())或类似AutoMapper的工具从EF映射到ViewModel。