首页 > 解决方案 > 当 EF 有一个实体拥有一个与自身类似的导航属性时,它不会给出完整的 json

问题描述

我在 asp.net core 中有一个项目,在这个项目中,我有两个实体。第一个实体是产品

public class Product
{
   public int id { get; set;}
   public string Name { get; set; }
   public virtual Brand Brand { get; set; }
}

我的第二节课是

public class Brand
{
  public Brand()
  {
     Products = new List<Products>();
  }
  public int Id { get; set; }
  public string Name { get; set; }
  public virtual List<Product> Products { get; set; }
}

我有一个这样的 APIController

public class APIController : ControllerBase
{
   public object GetProducts()
   {
     return decorDB.Products              
      .Include(p => p.Brand);
   }
 }

我得到的是这样的json

[
  {
     "id":1,
     "name":"iPhone",
     "brand":
        {
          "id":1,
          "name":"Apple",
          "products":[

如您所见,它并不完整,我认为 EF 会破坏它以防止循环。我想要这样的东西

[
      {
         "id":1,
         "name":"iPhone",
         "brand":
            {
              "id":1,
              "name":"Apple",
              "products":[]
            }
       }
]

我不知道要做什么!

标签: c#entity-frameworkasp.net-core-2.0

解决方案


免责声明:未经测试,但渴望发表评论。

我建议进行以下更改:

首先尝试更改您的操作结果签名:

public IEnumerable<Product> GetProducts()

下一步:尝试在您的启动中明确禁用往返:

services.AddMvc().AddJsonOptions(options =>
   {
       options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
   });

推荐阅读