【问题标题】:Return data LINQ in Json [closed]在 Json 中返回数据 LINQ [关闭]
【发布时间】:2013-11-26 06:52:55
【问题描述】:

如何在 Json 中返回数据 LINQ
使用这个,但没有工作

    public ActionResult GenerateShop()
    {
        LinqDataContext context = new LinqDataContext();
        IEnumerable<shops> shops = context.shops;            
        return Json(shops.ToList());
    }

这是错误“当序列化类型为“RentApp.Models.bikes”的对象时发现循环引用”
为什么他在我购物时写自行车?
成功了

var json = Json(shops.ToList());

但没有工作重新运行
当我手动创建模型时,一切正常,但我需要 LINQ

public List<Shops> ListShop()
    {
        List<Shops> shopList = new List<Shops>();
        using (SqlConnection conn = new SqlConnection())
        {
            conn.ConnectionString = this.connfiguration;
            using (SqlCommand cmd = new SqlCommand("SELECT * FROM shops", conn))
            {
                conn.Open();
                SqlDataReader rdr = cmd.ExecuteReader();                    
                while (rdr.Read())
                {
                    Shops shop = new Shops();
                    shop.id = (int)rdr["id"];
                    shop.name = rdr["name"].ToString();
                    shopList.Add(shop);
                }
                conn.Close();

            }
        }
        return shopList;
    }

在控制器中

    public ActionResult GenerateShop()
    {
        model.shops = this.rent.ListShop();
        return Json(model.shops);
    }

【问题讨论】:

  • “没有工作”是对您问题的可怕描述。请准确描述您得到的行为以及您期望发生的情况。
  • 我不知道,返回客户端服务器错误500,但是如果我手动创建模型,一切正常
  • 你能告诉我们shops类的定义吗?
  • shop类VisualStudio生成自我,基于数据库
  • 问题是,当您返回商店时,您很可能在其中有一个名为 Bikes 的属性,其中包含许多自行车,而反过来又包含一个名为 Shop 的属性,它引用您所在的商店试图返回。

标签: c# json linq asp.net-mvc-4


【解决方案1】:

问题是,当您返回商店时,您很可能在其中有一个名为 Bikes 的属性,其中包含许多自行车,而反过来又包含一个名为 Shop 的属性,该属性引用您要返回的商店,从而导致循环引用和如果没有进一步的指导,将导致序列化程序无限循环。

最简单的可能选择是将所需属性从您的Shop 实体投影到匿名类型并将其传递给 Json 方法。

LinqDataContext context = new LinqDataContext();
IEnumerable<shops> shops = context.shops;            
return Json(shops.select(x=>new{x.ShopID,
                                x.ShopProperty2,
                                x.ShopName,
                                ...
                                }));

【讨论】:

    【解决方案2】:

    试试这个我还没试过..

    public ActionResult GenerateShop()
        {
            LinqDataContext context = new LinqDataContext();
            var shops = context.shops.ToList();            
            return Json(shops, JsonRequestBehavior.AllowGet);
        }
    

    更多参考请看这里:-

    Why is JsonRequestBehavior needed?

    【讨论】:

      【解决方案3】:

      我不知道你想要什么,但你必须添加 JsonRequestBehaviour.AllowGet 才能返回 JSON 数据。

      很少有人建议一次性使用上下文。在全局中创建上下文类型然后使用它。

      public JsonResult GetJsonData()
      {
       LinqDataContext context = new LinqDataContext();
              var shops = context.shops.ToList();            
              return Json(shops,JsonRequestBehavior.AllowGet);
      }
      

      【讨论】:

      • 我正在使用,但没有工作
      • 这是错误“当序列化“RentApp.Models.bikes”类型的对象时发现循环引用”
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-16
      • 2016-08-21
      • 1970-01-01
      • 2022-10-22
      • 2016-03-15
      • 1970-01-01
      相关资源
      最近更新 更多