2014-02-16 51 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

宾果:)谢谢@帕特里克的答案都是正确的。 –