将项目附加到对象

Append items to an object

我已经创建了一个 Linq 语句来从数据库中获取项目列表。所以我需要遍历查询并附加到对象,然后序列化,然后才能用作 json in javascript。问题是我无法附加到声明的对象 '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;

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

更容易创建数组:

obj = new JArray();

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

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

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);

或者,您可以在查询中使用匿名类型,只需将查询的整个查询序列化为 returns 一个 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);