2015-12-11 82 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