我正在开发一些App。我希望通过JSON将数据从我的服务器发送到Android应用程序。我有一个RestFul WCF service
我的客户端与服务器进行通信。如果我想要一个单一的价值,那就很好..但是当我需要一堆数据时,我很惊讶。我搜索了一些线程并研究了JSON.net dectionary和一个对象,但我没有找到任何简单的例子。如果有人给我开头或解决我的问题,我们将不胜感激。
这是一个例子,我正在尝试。
DATABASE
现在我想要什么?我希望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"}
}
这就是我实际上在数据库中获得的最后一次遍历ROW。
答案 0 :(得分:4)
你需要在while循环中实例化新的GetQuiz对象,就像Patrick说的那样。
但该方法也应该返回List<GetQuiz>
而不仅仅是GetQuiz
。
将方法签名更改为
public List<GetQuiz> getAllQuiz(string q_code)
并添加
return gQuiz
作为方法中的最后一个语句,否则无论如何都不会编译。
答案 1 :(得分:2)
这是因为在迭代时你不会再次实例化getQuizObject
对象。因此,它会不断更改原始getQuizObject
对象的值。
试试这个:
while (oReader.Read())
{
GetQuiz getQuizObject = new GetQuiz();
...
gQuiz.Add(getQuizObject);
}