Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将项目附加到对象_C#_Json_Linq_Json.net - Fatal编程技术网

C# 将项目附加到对象

C# 将项目附加到对象,c#,json,linq,json.net,C#,Json,Linq,Json.net,我创建了一个Linq语句来从数据库中获取项目列表。所以我需要循环查询并附加到对象,然后序列化,以便能够在javascript中作为json使用。问题是我不能附加到声明的对象“obj”。有人能帮忙吗 DataContext dataContext = new DataContext(); var query = from qr in dataContext.tblStocks where qr.enable == true

我创建了一个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;
您每次通过循环重新分配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);

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

@布莱恩马斯喀特:你甚至不必列一张清单。查询返回一个IEnumerable,并自动序列化为jsonArray