C# 将项目附加到对象
我创建了一个Linq语句来从数据库中获取项目列表。所以我需要循环查询并附加到对象,然后序列化,以便能够在javascript中作为json使用。问题是我不能附加到声明的对象“obj”。有人能帮忙吗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
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