2016-09-18 2 views
2

Я хочу вернуть все мои данные из базы данных и создать строку, или я хочу, чтобы они обрабатывали и записывали результаты в Json.Получите данные из базы данных и создайте строку для использования для JSON

Мой код выглядит следующим образом:

public string GetNewTickets() 
{ 
    using (SqlConnection con = new SqlConnection(constr)) 
    { 
     using (SqlCommand cmd = new SqlCommand("Select LoggedDate, count(ID) as ticketAmount from Tickets WHERE LoggedDate >=dateadd(day,datediff(day,0,GetDate())- 7,0) AND State = '1' group by LoggedDate")) 
     { 
      var ticketAmount = 0; 
      var loggedDate = DateTime.Now; 
      var ActualloggedDate = string.Empty; 
      var convertedLoggedDate = string.Empty; 

      var test = string.Empty; 

      cmd.Connection = con; 
      con.Open(); 
      var reader = cmd.ExecuteReader(); 

      if (reader.HasRows) 
      { 
       while (reader.Read()) 
       { 
        ticketAmount = (int)reader["ticketAmount"]; 
        //Convert to JSON format 
        loggedDate = (DateTime)reader["LoggedDate"]; 
        ActualloggedDate = JsonConvert.SerializeObject(loggedDate, new IsoDateTimeConverter()); 
        convertedLoggedDate = ActualloggedDate.Substring(1, ActualloggedDate.Length - 4); 
       } 
      } 
      var entity = new 
      { 
       ticketAmount = ticketAmount, 
       loggedDate = convertedLoggedDate, 
      }; 
      var json = serializer.Serialize(entity); 
      return json; 
     } 
    } 
} 

Это возвращает только одну строку в формате JSON

{"ticketAmount":1,"loggedDate":"2016-09-16T08:03:"} 

У меня есть около 10 записей в моей базе данных, и я хочу, чтобы вернуть все те Обязательное. Результат должен быть чем-то вроде

{"ticketAmount":1,"loggedDate":"2016-09-16T08:03:"}, 
{"ticketAmount":5,"loggedDate":"2016-09-17T08:03:"}, 
{"ticketAmount":4,"loggedDate":"2016-09-18T08:03:"} 
+0

Добавить этот 'var json + = serializer.Serialize (entity);' внутри 'while' и объявить' var entity' перед 'if'. –

+0

Прежде если - 'вар объекта = String.Empty;' в то время - 'вар = serializer.Serialize JSON (объект);' Как бы я затем использовать 'уаг объект = новый { ticketAmount = ticketAmount, loggedDate = convertLoggedDate, }; ' – Ruan

+0

' var json + = serializer.Serialize (entity); 'внимательно посмотрите на него ... он объединяет строки, используя' + = '... поэтому используйте его внутри' while'. –

ответ

0

Если вы хотите вернуть несколько объектов JSON (один для каждой строки), вы можете вернуть массив JSON, например:

[ 
    {"ticketAmount":1,"loggedDate":"2016-09-16T08:03:"}, 
    {"ticketAmount":5,"loggedDate":"2016-09-17T08:03:"}, 
    {"ticketAmount":4,"loggedDate":"2016-09-18T08:03:"} 
] 

С помощью

var json = serializer.Serialize(entity); 
return json; 

Ваша программа сериализует ровно одну сущность (последнюю) независимо от того, сколько совпадающих записей существует. Поэтому я рекомендую хранить все совпадающие объекты в List и сериализовать объект List. Например:

public class EntityDto { 
    public int ticketAmount {get; set;} 
    public DateTime loggedDate {get; set;} 
} 

... 

public string GetNewTickets() 
{ 
    var entities = new List<EntityDto>(); 
    using (SqlConnection con = new SqlConnection(constr)) 
    { 
     using (SqlCommand cmd = new SqlCommand("Select LoggedDate, count(ID) as ticketAmount from Tickets WHERE LoggedDate >=dateadd(day,datediff(day,0,GetDate())- 7,0) AND State = '1' group by LoggedDate")) 
     { 
      var ticketAmount = 0; 
      var loggedDate = DateTime.Now; 
      var ActualloggedDate = string.Empty; 
      var convertedLoggedDate = string.Empty; 

      var test = string.Empty; 

      cmd.Connection = con; 
      con.Open(); 
      var reader = cmd.ExecuteReader(); 

      if (reader.HasRows) 
      { 
       while (reader.Read()) 
       { 
        ticketAmount = (int)reader["ticketAmount"]; 
        //Convert to JSON format 
        loggedDate = (DateTime)reader["LoggedDate"]; 
        ActualloggedDate = JsonConvert.SerializeObject(loggedDate, new IsoDateTimeConverter()); 
        convertedLoggedDate = ActualloggedDate.Substring(1, ActualloggedDate.Length - 4); 
        var entity = new EntityDto 
        { 
         ticketAmount = ticketAmount, 
         loggedDate = convertedLoggedDate, 
        }; 
        entites.Add(entity); 
       } 
      } 

     }    
    } 
    var json = serializer.Serialize(entities); 
    return json; 
} 
+0

Cant edit post, но я chnaged мой код для 'public string loggedDate {get; set;} 'также посмотреть на var' var entites = new List (); 'и изменить его на' entity', Спасибо – Ruan

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