Web API中如何将LINQ to SQL查询结果序列化为嵌套数组结构JSON?
问题原因
- 实体类
DispatchData的data字段类型错误:当前定义为一维字符串数组string[],仅能存储单条记录的字段集合,你需要的是二维数组string[][]来存储多条记录的子数组。 - 循环赋值逻辑错误:每次遍历查询结果时都直接覆盖
dta.data的值,最终只会保留最后一条记录的内容。
修正代码
第一步:修改DispatchData定义
public class DispatchData { // 将一维字符串数组改为二维字符串数组 public string[][] data; }
第二步:调整查询赋值逻辑
你可以直接用LINQ投影生成目标结构,避免手动循环覆盖的问题:
DispatchData dta = new DispatchData(); using (SalesDataContext oSqlData4 = new SalesDataContext()) { var result = (from x in oSqlData4.Finances where (x.records.ID.Equals("12") || x.records.ID.Equals("123")) where (x.Status == "Not Approved") select x).ToList(); // 直接投影生成二维数组 dta.data = result.Select(item => new string[] { item.Order_ID.ToString(), item.ID.ToString() }).ToArray(); var json = JsonConvert.SerializeObject(dta); return json; }
如果更习惯用循环实现,也可以按如下写法调整:
DispatchData dta = new DispatchData(); List<string[]> tempList = new List<string[]>(); using (SalesDataContext oSqlData4 = new SalesDataContext()) { var result = (from x in oSqlData4.Finances where (x.records.ID.Equals("12") || x.records.ID.Equals("123")) where (x.Status == "Not Approved") select x).ToList(); foreach (var item in result) { tempList.Add(new string[] { item.Order_ID.ToString(), item.ID.ToString() }); } dta.data = tempList.ToArray(); var json = JsonConvert.SerializeObject(dta); return json; }
修改后序列化输出的格式就会符合你预期的嵌套数组结构。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

