【问题标题】:Create specific json response from linq to SQL query output?创建从 linq 到 SQL 查询输出的特定 json 响应?
【发布时间】:2021-10-16 10:22:03
【问题描述】:

我正在开发 Web API。我正在从一个数据库表中获取数据:

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

    foreach (var item in result)
    {
        dta.data = new string[] { item.Order_ID.ToString(), item.ID.ToString() };
    }

    var json = JsonConvert.SerializeObject(dta);
        
    return json;
}

public class DispatchData
{
    public string[] data;
}

此代码只返回一条记录:

{ "data": ["2508", "4684"] }  

我希望数组中的每一行都像这样

{"data":[ ["2508","4684"],["2223","1123"],....] }

     

【问题讨论】:

  • 问题出在这一行data.data = … 你总是分配给数组。您需要将其添加到数组中

标签: c# json list webapi


【解决方案1】:

为什么不将result 作为List<DispatchData> 的强类型模型返回:

您的DispatchData 班级:

public class DispatchData
{
    public string Order_ID {get;set;}
    public string ID {get;set;}
}

您可以创建一个Root 类来处理您的JSON

public class Root
{
  public List<DispatchData> data=new List<DispatchData>();
}

您可以像这样从查询中返回:

Root dta = new Root();
using (SalesDataContext oSqlData4 = new SalesDataContext())
{
    dta.data = (from x in oSqlData4.Finances
                  where (x.records.ID.Equals("12") ||
                         x.records.ID.Equals("123"))
                  where (x.Status == "Not Approved")
                  select x).ToList();

    var json = JsonConvert.SerializeObject(dta);
        
    return json;
}

【讨论】:

    【解决方案2】:

    对于你想要的结果,你的类定义错误

    public class DispatchData
    {
        public string[][] data;
    }
    

    然后可以直接在一个数组中选择这对ID,然后嵌套在另一个数组中,直接赋值给dta.data

    using (SalesDataContext oSqlData4 = new SalesDataContext())
    {
        var dta = new DispatchData() {
            data = (from x in oSqlData4.Finances
                      where (x.records.ID.Equals("12") ||
                             x.records.ID.Equals("123"))
                      where (x.Status == "Not Approved")
                      select new[]{ x.Order_ID.ToString(), item.ID.ToString() }
                   ).ToArray()
        };
    
        var json = JsonConvert.SerializeObject(dta);
            
        return json;
    }
    

    【讨论】:

      猜你喜欢
      • 2013-12-04
      • 2013-09-11
      • 2018-08-13
      • 1970-01-01
      • 1970-01-01
      • 2021-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多