2014-02-16 97 views
1

我正在使用一些應用程序。其中我想從我的服務器發送數據到JSON中的Android應用程序。我有一個RestFul WCF service我的客戶端與服務器進行通信。如果我想要一個單一的值,那很好。但是當我想要一堆數據時,我會感到震驚。我已經搜索了一些線程並研究了JSON.net函數和對象,但是我沒有找到任何簡單的例子。如果有人給我開頭或解決我的問題,將很感激。使用c序列化JSON#

這裏是一個例子我如何嘗試。

DATABASE enter image description here

現在,我想要什麼?我想要所有的結果,其中有JSON字符串或對象格式的q_QuizCode = dfsew43

如何我嘗試:

public GetQuiz getAllQuiz(string q_code) 
    { 
     GetQuiz getQuizObject = new GetQuiz(); 
     List<GetQuiz> gQuiz = new List<GetQuiz>(); 

     #region DataBase_Connectivity 

     string strConnectionString = ConfigurationManager.ConnectionStrings["SQL"].ConnectionString; 
     SqlConnection conn = new SqlConnection(strConnectionString); 
     conn.Open(); 

     #endregion 

     string query = "select q_Question,q_opa,q_opb,q_opc,q_opd,q_cop from Table_QuizDetail where q_QuizCode = @qcode"; 
     SqlCommand oCmd = new SqlCommand(query, conn); 
     oCmd.Parameters.AddWithValue("@qcode", q_code); 
     using (SqlDataReader oReader = oCmd.ExecuteReader()) 
     { 
      while (oReader.Read()) 
      { 

       getQuizObject.Quiz_Question = oReader["q_Question"].ToString(); 
       getQuizObject.Quiz_Option_A = oReader["q_opa"].ToString(); 
       getQuizObject.Quiz_Option_B = oReader["q_opb"].ToString(); 
       getQuizObject.Quiz_Option_C = oReader["q_opc"].ToString(); 
       getQuizObject.Quiz_Option_D = oReader["q_opd"].ToString(); 
       getQuizObject.Quiz_Correct_Op = oReader["q_cop"].ToString(); 

       gQuiz.Add(getQuizObject); 
      } 
     } 
    } 

我能得到什麼:

{ 
"getAllQuizResult":{ 
"Quiz_Correct_Op":"b", 
"Quiz_Option_A":"jreowi", 
"Quiz_Option_B":"slkj", 
"Quiz_Option_C":"elk", 
"Quiz_Option_D":"dslkj", 
"Quiz_Question":"ewepewoirpowejrdsngfdglfdjkbk"} 
} 

這就是事實上,我只是在數據庫中的最後經過一行。

+0

如果這是一個相當嚴重的項目,我強烈建議您查看一個ORM(對象關係映射器),它將爲您提供所有複雜的,容易出錯的SQL解析,併爲您提供漂亮,整潔的對象你可以改爲使用。我猜想最常見的兩個是[實體框架](http://entityframework.codeplex.com/)和[NHibernate](http://nhforge.org/)。 –

回答

4

您需要實例while循環中新GetQuiz對象,就像帕特里克指出。

但該方法還應該返回List<GetQuiz>而不僅僅是GetQuiz

方法簽名更改爲

public List<GetQuiz> getAllQuiz(string q_code) 

,並添加

return gQuiz 

作爲方法的最後一條語句,否則無論如何也不會編譯。

+0

好點!謝謝 –

+0

Bingo :)謝謝@Daniel –

2

這是因爲您在迭代時沒有再次實例化getQuizObject對象。因此它會不斷更改原始對象的值。

試試這個:

while (oReader.Read()) 
{ 
    GetQuiz getQuizObject = new GetQuiz(); 

    ... 

    gQuiz.Add(getQuizObject); 
} 
+0

賓果:)謝謝@帕特里克的答案都是正確的。 –