2016-09-17 314 views
1

我想從使用C#的SQL Server數據庫獲取數據。我正在嘗試從字符串生成器中獲取json字符串。我嘗試這樣的:將字符串生成器轉換爲json字符串

public string GetData() 
{ 
    using (SqlConnection con = new SqlConnection(this.Connection)) 
    { 
     con.Open(); 

     SqlCommand command = new SqlCommand("Select TITLE, DURATION, STATUS, TYPE from PROJECTS ", con); 

     StringBuilder sb = new StringBuilder(); 
     sb.Append("{"); 

     using (SqlDataReader reader = command.ExecuteReader()) 
     { 
      while (reader.Read()) 
      { 
       var k = reader.GetString(3); 

       if (k == "M") 
       { 
        sb.Append("main"); 
        sb.Append("{"); 
        sb.Append("sub:[]"); 
        sb.Append("Tittle:"); 
        sb.AppendFormat("{0}", reader["TITTLE"]); 
       } 

       if (k == "S") 
       { 
        sb.Append("sub"); 
        sb.Append("{"); 
        sb.Append("task:[]"); 
        sb.Append("Tittle:"); 
        sb.AppendFormat("{0}", reader["TITTLE"]); 
       } 

       if (k == "T") 
       { 
        sb.Append("task"); 
        sb.Append("{"); 
        sb.Append("Tittle:"); 
        sb.AppendFormat("{0}", reader["TITTLE"]); 
       } 
      }; 
     } 

     sb.Append("}"); 
     sb.AppendLine(); 

     return sb.ToString(); 
    } 
} 

現在我得到這樣的字符串

sb = {{main{sub:[]Tittle:newsub{task:[]Tittle:new1task{Tittle:new2} 

,但我需要的字符串是這樣的:

[{"main":{"sub":[{"task":[{"tittle":"new2""}],"tittle":"new1","}],"tittle":"new","}}] 

的意思是:我的主標題是新的子絲毫不差名new1和任務標題new2。我需要做些什麼改變我的代碼才能獲得我所需的json字符串?

+0

在sb.Append中使用此語法(「」「main」「」); –

+0

你爲什麼建立你的JSON結果爲字符串? –

+0

我想更新它在我的頁面表使用循環,因爲我需要JSON格式輸出 –

回答

0

有一些問題與您的代碼:

要成爲一個有效的JSON字符串,屬性名必須用雙引號"被封閉,所以你必須做一些像sb.Append("\"main\"");

每個屬性名稱有後跟一個冒號:,所以你必須做點像sb.Append("\"main\": ");

你正在處理嵌套結構,包含對象的數組本身包含數組...你只能添加右括號所有項目都添加後,數組的。所以這樣做

sb.Append("\"sub\": ["); 
//here you add the subitems in a loop 
sb.Append("]"); 

爲了能夠做到這一點,你必須保持跟蹤你有什麼結構,在當下開放,你有你自己的查詢到所需的確切順序返回行(即首先是主標題,然後是第一個包含子,然後是包含在該子任務中的任務,然後是第二個子任務,然後是任務...)

您也永遠不會關閉更高級別的開放大括號{。這裏和數組一樣適用。如果添加一個對象,則必須添加其所有內容,然後添加一個結束標記}

通常,我會建議不要自己創建JSON,而是使用像JSON.net這樣的框架。您可以根據需要構建集合,然後調用將生成有效json字符串的框架序列化方法。

+0

坦克.......... –

+0

和更多的疑問。我想夸脫(「」)的列值。 sb.AppendFormat(「{0}」,reader [「TITTLE」]);在這裏我獲得了一個新的價值。如果你的屬性值是一個字符串,你還必須添加引號,所以使用'sb.AppendFormat(「\」{0} \「」,reader [「TITTLE」]);而不是新的我想要「新」 –

+0

。 '但是,我強烈建議你使用庫來創建json。例如,如果你的TITTLE值中有一個包含引號''',那麼你也必須照顧它,否則它會打斷你的jsonstring。 – derpirscher