2014-02-16 4 views
1

Я работаю над некоторыми приложениями. в котором я хочу отправить данные с моего сервера на Android-приложение в JSON. У меня есть RestFul WCF service, с которого мой Клиент взаимодействует с сервером. Его штраф, если я хочу единственное значение .. но я поразил, когда мне нужен куча данных. Я искал некоторые темы и изучал детекцию JSON.net и объект, но я не нашел простого примера. Поймите, если кто-нибудь даст мне начало или выяснит мою проблему.Сериализация JSON с использованием C#

вот пример Как я пытаюсь.

DATABASE enter image description here

Теперь то, что я хочу? Мне нужны все результаты, которые имеют q_QuizCode = dfsew43 в строке JSON или в формате объекта.

Как попробовать:

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

Если это довольно серьезный проект, я настоятельно рекомендую вам взглянуть на ORM (Object Relational Mapper), который будет выполнять все сложные, подверженные ошибкам синтаксические разбора SQL для вас и служить вам приятным, аккуратным объектам, которые вы можете работать вместо этого. Я бы предположил, что двумя наиболее распространенными являются [Entity Framework] (http://entityframework.codeplex.com/) и [NHibernate] (http://nhforge.org/). –

ответ

4

Вам нужно создать экземпляр нового объекта GetQuiz внутри цикла в то время, как Патрик заявляет.

Но метод должен также возвращать List<GetQuiz> вместо GetQuiz.

Изменить метод подписи

public List<GetQuiz> getAllQuiz(string q_code) 

и добавить

return gQuiz 

в качестве последнего оператора в методе, в противном случае он не будет компилировать в любом случае.

+0

Хорошая точка! Спасибо –

+0

Bingo :) спасибо @ Даниэль –

2

Это потому, что вы не создаете объект getQuizObject еще раз при итерации. Поэтому он продолжает изменять значения исходного объекта getQuizObject.

Попробуйте это:

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

    ... 

    gQuiz.Add(getQuizObject); 
} 
+0

Bingo :) спасибо @Patrick оба ответа правильные. –

Смежные вопросы