我试图在我的控制器中发送一个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; }
}
答案 0 :(得分:1)
如果您没有为EF禁用延迟加载,则您的集合属性将为空(默认情况下),因此当您序列化它们时,它们将不会显示。你需要在获取结果时手动.Include()它们,并禁用延迟加载,以便它们急于加载。
更好的方法是定义自己的ViewModel类型 - 通常不希望将数据模型类型公开为API模型。然后,您可以根据需要填充它并将其展平或以其他方式重新构建它以针对HTTP客户端(而不是数据库客户端)优化它。您可以创建自己的自定义ViewModel类型并手动填充它(只是实例化它并设置其属性),看看是否正确地序列化了。然后使用LINQ投影(例如.Select()
)或类似AutoMapper的工具从EF映射到ViewModel。