使用c#序列化JSON

时间:2014-02-16 11:33:13

标签: c# json wcf json.net

我正在开发一些App。我希望通过JSON将数据从我的服务器发送到Android应用程序。我有一个RestFul WCF service我的客户端与服务器进行通信。如果我想要一个单一的价值,那就很好..但是当我需要一堆数据时,我很惊讶。我搜索了一些线程并研究了JSON.net dectionary和一个对象,但我没有找到任何简单的例子。如果有人给我开头或解决我的问题,我们将不胜感激。

这是一个例子,我正在尝试。

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"}
}

这就是我实际上在数据库中获得的最后一次遍历ROW。

2 个答案:

答案 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);
}