【问题标题】:Append items to an object将项目附加到对象
【发布时间】:2015-04-13 12:21:05
【问题描述】:

我创建了一个 Linq 语句来从数据库中获取项目列表。所以我需要循环查询并附加到对象然后序列化然后能够在javascript中用作json。问题是我不能附加到声明的对象'obj'。谁能帮忙??

DataContext dataContext = new DataContext();
        var query = from qr in dataContext.tblStocks
                    where qr.enable == true
                    select qr;

        var obj = new JObject();

        foreach (var item in query)
        {
            //obj = new JObject();
            obj = ( new JObject(
                    new JProperty("stockID",item.stockID),
                    new JProperty("itemDepartmentID", item.itemDepartmentID),
                    new JProperty("item" , item.item),
                    new JProperty("description", item.description),
                    new JProperty("stockAmount", item.stockAmount),
                    new JProperty("priceExlVat", item.priceExlVat),
                    new JProperty("vat", item.vat),
                    new JProperty("priceIncVAT", item.priceIncVAT),
                    new JProperty("upc1", item.upc1),
                    new JProperty("upc2", item.upc2)
                ));


       }
        var serialized = JsonConvert.SerializeObject(obj);
        return serialized;

【问题讨论】:

    标签: c# json linq json.net


    【解决方案1】:

    您每次通过循环都重新分配obj,因此所有其他数据都将丢失。

    更容易创建数组:

    obj = new JArray();
    
    foreach (var item in query) {
      obj.Add(new JObject(
                new JProperty(...),
                ...));
    }
    

    【讨论】:

      【解决方案2】:

      你为什么不直接序列化你的对象?

      List<dynamic> obj = new List<dynamic>();
      foreach(var item in query) {
          obj.Add(new
          {
              itemDepartmentID = item.itemDepartmentID,
              description = item.description,
              ...
          });
      }
      
      var serialized = JsonConvert.SerializeObject(obj);
      

      【讨论】:

      • @BrianMuscat 你甚至不必形成一个列表。查询返回一个 IEnumerable 并自动序列化为 jsonArray
      【解决方案3】:

      您可以在查询中使用匿名类型并仅序列化整个查询,因为查询返回 IEnumerable 并且它会自动转换为 jsonArray:

      DataContext dataContext = new DataContext();
      var query = dataContext.tblStocks
          .Where(stockItem => stockItem.enable)
          .Select(stockItem => new
                              {
                                  stockItem.stockID,
                                  stockItem.itemDepartmentID,
                                  stockItem.item,
                                  stockItem.description,
                                  stockItem.stockAmount,
                                  stockItem.priceExlVat,
                                  stockItem.vat,
                                  stockItem.priceIncVat,
                                  stockItem.upc1,
                                  stockItem.upc2
                              });
      return JsonConvert.SerializeObject(query);
      

      【讨论】:

        猜你喜欢
        • 2016-01-23
        • 2020-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多