2015-12-11 80 views
0

我有一个返回像这样的查询:asp.net的MVC API JSON格式

  • 对象|数量| ......
  • Random_Name_1 | 5 | .....
  • Random_Name_2 | 3 | ......

我想回到一个J-儿子这样

{"Success": true, "Message": "Total rows 8", "Data": { "Random_Name_1": {"QTY": 5 ... }, "Random_Name_2": {"QTY": 3 ... } } } 

我怎么能做到这一点在ASP.NET MVC4制作的web API?

回答

0

这是我如何解决它,周一我可能会改变它是反射..

   var x = tw.spCall(type).ToList(); 

       if (x.Count() == 0) 
        return new { Success = false, Message = "No data!" }; 

       DataSet temp = new DataSet(); 

       foreach (var y in x) { 
        if (temp.Tables[y.EQUIPMENT] == null) { 

         temp.Tables.Add(y.EQUIPMENT); 
         temp.Tables[y.EQUIPMENT].Columns.Add("id_key"); 
         temp.Tables[y.EQUIPMENT].Columns.Add("PartNumber"); 
         ... 
        }; 

        DataRow row = temp.Tables[y.EQUIPMENT].Rows.Add(); 

        row.SetField("id_key",y.id_key); 
        row.SetField("PartNumber",y.PartNumber); 
        ... 

       } 
       return JsonConvert.SerializeObject(temp, Newtonsoft.Json.Formatting.None); 
0

你可以试试这个:

// your data 
var q = new[] 
{ 
    new {OBJECT = "Random_Name_1", QTY = 5, TYPE = "A"}, 
    new {OBJECT = "Random_Name_2", QTY = 3, TYPE = "B"}, 
    new {OBJECT = "Random_Name_3", QTY = 8, TYPE = "B"} 
}; 

// construct the object 
var obj = new 
{ 
    Success = true, 
    Message = string.Format("Total rows {0}", q.Count()), 
    Data = q.ToDictionary(
     item => item.OBJECT, 
     item => item.GetType().GetProperties() 
     .Where(p => p.Name != "OBJECT") 
     .ToDictionary(p => p.Name, p => p.GetValue(item, null))) 
}; 

// serialize the object (note that you don't need to do that from web api) 
var json = JsonConvert.SerializeObject(obj); 

注意taht如果你已经知道的数据(即列)的结构,那么你可以通过避免反射更有效率。意思是:

var obj = new 
{ 
    Success = true, 
    Message = string.Format("Total rows {0}", q.Count()), 
    Data = q.ToDictionary(
     item => item.OBJECT, 
     item => new { item.QTY, item.TYPE }) 
}; 
+0

喔好,我看到你在做什么有,是的,我试了一下,问题是,Random_Name_1可能不止一次,所以随着Random_Name_1,Random_Name_2,Random_Name_3我会有3个不同的表,具有相同的数据结构,bue“Random_Name”是一个机器的名称,并且具有表事件(明星/关闭/开始工作/结束工作/等等等等) – Rafa

+0

然后你的数据集不能用你描述的形式表示,检查一下JSON是什么,对象中的每个字段必须是唯一的,你不能一个JSON对象中具有相同名称的多个字段。使用数组而不是字典。 – Nikolay

+0

事情是,我只想打1分钟的数据库,检索可以说50个表(每个机器我想分析一个),我想为每个表创建1个js数组。所以,我只是在我的查询中为每个表添加一个标识符,然后在C#中我将这些表分开而不返回标识符 – Rafa