You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Web API中如何将LINQ to SQL查询结果序列化为嵌套数组结构JSON?

问题原因

  1. 实体类DispatchData的data字段类型错误:当前定义为一维字符串数组string[],仅能存储单条记录的字段集合,你需要的是二维数组string[][]来存储多条记录的子数组。
  2. 循环赋值逻辑错误:每次遍历查询结果时都直接覆盖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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 15:18:03