Member 14938958 Ответов: 2

Как вернуть массив JSON в ответе web API


Нужен такой ответ JSON:

{
        "statusCode": 200,
        "errorMessage": "Success",
        "Employees": [
                {
                "empid": "7228",
                "name": "Tim",
                "address": "10815 BALTIMORE",
                
                },
               {
                "empid": "7240",
                "name": "Joe",
                "address": "10819 Manasas",
                }
            ]
}


класс моделей:

public class EmployeeList
{
    public string empid { get; set; }
    public string name { get; set; }
    public string address { get; set; }
}


public class Employee
{
     public int statusCode { get; set; }
     public string errorMessage{ get; set; }
     public List<EmployeeList> Employees { get; set; }
}


Что я уже пробовал:

Контроллер вот такой:

List<Models.Employee> emp = new List<Models.Employee>();
//call to SP
if (rdr.HasRows)
    {
           
                var okresp = new HttpResponseMessage(HttpStatusCode.OK)
                {
                    ReasonPhrase = "Success"
                };

                Models.Employee item = new Models.Employee();
                {
                    item.statusCode = Convert.ToInt32(okresp.StatusCode);
                    item.errorMessage = okresp.ReasonPhrase;
               
                    
                    while (rdr.Read())
                    {
                        item.Employees = new List<EmployeeList>{
                        new EmployeeList
                        { 
                            empid = Convert.ToString(rdr["empid"]),
                            name = Convert.ToString(rdr["name"]),
                            address = Convert.ToString(rdr["address"]) 
                        }};
                     }
                    
                };

    emp.add(item);

// return response


Я не могу получить часть цикла создания массива JSON в файле ответов. Я получаю только последнее значение списка сотрудников от reader в своем ответе JSON. Я неправильно назначаю значения в цикле While? Правильно ли возвращать список в виде массива JSON?

2 Ответов

Рейтинг:
2

Richard MacCutchan

Вы создаете новое List<EmployeeList> для каждой записи, которую вы читаете. Вы должны создать List первый. Затем для каждой прочитанной записи создайте новую Employee пункт(см. ниже) и добавьте его в список.

Кроме того, ваш EmployeeList класс-это не список, а ваш Employee класс содержит List, которая является довольно запутанной. Вы должны переименовать оба класса, чтобы точно отразить то, что они должны представлять.


Member 14938958

Спасибо Ричарду, правда, название неверное, это для иллюстрации. Кроме того, вы упомянули "создать новый элемент сотрудника(см. ниже)" Я полагаю, вы пропустили, чтобы добавить здесь какой-то код? поправьте меня, если я ошибаюсь.

Richard MacCutchan

"название неверно, это для иллюстрации." Ну, это не имеет никакого смысла, это просто делает его более трудным для нас, чтобы помочь вам.

"Кроме того, вы упомянули "создать новый элемент сотрудника(см. ниже)" Я полагаю, вы пропустили, чтобы добавить здесь какой-то код?" Извините, но я не понимаю, о чем вы спрашиваете.

Рейтинг:
12

F-ES Sitecore

Вам нужно что-то вроде;

Models.Employee item = new Models.Employee();
                {
                    item.statusCode = Convert.ToInt32(okresp.StatusCode);
                    item.errorMessage = okresp.ReasonPhrase;
                    item.Employees = new List<EmployeeList>();
                    
                    while (rdr.Read())
                    {
                        item.Employees.Add (new EmployeeList
                        { 
                            empid = Convert.ToString(rdr["empid"]),
                            name = Convert.ToString(rdr["name"]),
                            address = Convert.ToString(rdr["address"]) 
                        });
                     }
                    
                };


таким образом, список создается один раз, а затем добавляется к нему при каждом чтении. Ваш исходный код просто перекрывал предыдущий список с новым при каждом чтении, оставляя на последнем элементе.


Member 14938958

Вы правы! Большое спасибо.
Я действительно пытался добавить каждый пункт, как "пункт.сотрудники.Add (new EmployeeList{});" ранее, но получал внутреннюю ошибку сервера, затем я изменил код.. не понимал, что мне нужно добавить список "item.Employees = new List<employeelist>();". Спасибо.