2016-07-08 48 views
1

我想從SQL數據庫表使用ASP.Net webservice生成下面的json。那麼我將在d3.js中進行visualaize。Json從ASP.Net webservice使用C#

我需要的是如何使用C#將數據錶轉換爲以下json格式。

我的SQL查詢就像

select SiteName,status,conformed,total from 
[Output].SIT_W10_Application_Readiness_overview_siteview 

SQL輸出:

location  status  value   total 
111, Valencia conformed 1    26 
111, Valencia Testing  22    26 

代碼我想:

public class Propm234 
    { 
     public string SiteName{ get; set; } 
     public string status{ get; set; } 
     public string conformed{ get; set; } 
     public string total{ get; set; } 

    } 


    List<Propm234> p91 = new List<Propm234> { }; 

    [WebMethod] 

    [ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = false)] 
    public string get_SITAppr() 
    { 
     string query = "select SiteName,status,conformed,total from 
[Output].SIT_W10_Application_Readiness_overview_siteview"; 
     SqlCommand cmd = new SqlCommand(query); 

     string a = GetSITData11(cmd); 
     DataSet ds = GetSITData1(cmd); 

     DataTable dt = ds.Tables[0]; 
     foreach (DataRow item in ds.Tables[0].Rows) 
     { 
      Propm234 pp = new Propm234(); 
      pp.SiteName= item["SiteName"].ToString(); 
      pp.status = item["ws"].ToString(); 
      pp.conformed= item["W10Tested"].ToString(); 
      pp.total= item["TotalPackage"].ToString(); 
      p91.Add(pp); 

     } 
     JavaScriptSerializer jss = new JavaScriptSerializer(); 
     string ss = jss.Serialize(p91); 
     return ss; 
    } 

當前的代碼返回:

[ 
    { 
    "location":"111, Valencia, (VE),SEDCS349", 
    "status":"conformed", 
    "value":"1", 
    "total":"26"} 
    } 
] 

但我所期待一個JSON是從C#web服務低於

jsonData = [ 
       { 
       "key": "Total", 
       "values": [ 
          {"label": "111, Valencia", "value": 26}, 

          ] 
       }, 
       { 
       "key": "Conformed", 
       "values": [ 
          {"label": "111, Valencia", "value": 1}        
         ] 
      }, 
      { 
       "key": "Testing", 
       "values": [ 
          {"label": "111, Valencia", "value": 22} 
         ] 
      } 
      ]; 
+1

這就是偉大的。你寫了什麼代碼來解決這個問題? –

+0

看到我的代碼加入.. – sen

+0

如果它是蟒蛇我可以很容易地做到這一點......我是新來的C#....請不要降級... – sen

回答

1

看看JSON.NET Serialization。我懷疑你有你的Propm234()類做一些這樣的事情:

[JsonProperty(PropertyName = "location")] 
public string Vendor { get; set; } 

但是,試圖回答你的問題,如果你想你的JSON看起來像你的第一個例子,你的C#對象有像她那樣爲好。

public class JsonObject 
{ 
    public string Key { get; set; } 
    public Dictionary<string, string> Values { get; set; } 
} 

你顯然不具備使用字典你的價值觀,如果你想你想的是什麼類型。但故事的寓意是,如果你不序列化一個列表,你不會得到一個列表。您將獲得一個值,因爲這就是您的序列化,並且您沒有指定Key對象或Values對象。

如果你不想爲你做的序列化JSON的具體類別,你可以使用匿名對象,如:

Object jsonObj = new { 
    key = "conformed", 
    values = Propm234List.Select(s => 
     new { 
      label = s.label, 
      value = s.value 
     } 
    ) 
} 

JavaScriptSerializer jss = new JavaScriptSerializer(); 
string ss = jss.Serialize(jsonObj); 
return ss; 
+0

親愛的dckuehn,我試着用我提到的sql結果,但我沒有得到預期的結果。我也很困惑如何實現你的邏輯。請幫我 – sen

+0

@sen我加了序列化位。你明白我的觀點嗎?您的代碼不會將從您的SQL語句檢索到的值分解爲鍵值組。我的代碼試圖告訴你如何做到「符合」。您還需要處理「總計」和「測試」,並將它們合併到一個鍵值列表中,然後序列化整個列表以獲得您想要的結果。 – dckuehn

+0

亞...最後我得到了,並取得了結果..感謝很多.. – sen