Вывести элементы с ответа от сервера в DataGridView

212
18 декабря 2017, 11:36

Вывести элементы с ответа от сервера. Приходит ответ от сервера.

    {
    "users": [
        {
            "id_lib": "53",
            "name": "Никита",
            "surname": "Шишин",
            "group": "ПИН-151",
            "date_of_taking": "2016-10-08",
            "lib_card": "098-769",
            "name_book": "Операционные системы - Флоренсов 2009 г."
        },
        {
            "id_lib": "54",
            "name": "Владислав",
            "surname": "Павлюк",
            "group": "ИВТ-152",
            "date_of_taking": "2017-07-09",
            "lib_card": "777-777",
            "name_book": "Основы теории управления"
        },
        {
            "id_lib": "55",
            "name": "Виктор",
            "surname": "Юрченко",
            "group": "ПИ-151",
            "date_of_taking": "2017-01-01",
            "lib_card": "000-000",
            "name_book": "Как закрыть 2"
        }
    ]
}

И надо мне записать эти данные в DataGridView. Как это сделать?

Вот я пытаюсь сделать, в string json лежит пришедшие эти данные. Но пишет json не содержит определения для Count и не видит мои переменные id_lib, name и тд.

    private void DataGridView(string json)
{
    DataTable t = new DataTable();
    t.Columns.Add("ИД");
    t.Columns.Add("Имя");
    t.Columns.Add("Фамелия");
    t.Columns.Add("Группа");
    t.Columns.Add("Дата выдачи");
    t.Columns.Add("Номер билета");
    t.Columns.Add("Название книги");
    for (int i = 0; json.Count > i; i++)
    {
        t.Rows.Add(new object[] { json.id_lib[i], json.name[i], json.surname[i], json.group[i], json.date_of_taking[i], json.lib_card[i], json.name_book[i] });
        dataGridView1.DataSource = t;
    }
}
Answer 1

У строки json свойство Count означает количество содержащихся в ней символов. Но Вы же работаете не с символами!

Вы действуете слишком поспешно. Для того, чтобы JSON-строку преобразовать в массив каких-то объектов, недостаточно просто взять и пробежаться по ней в цикле. Нужно выполнить следующие шаги:

  1. Определить контракт (объяснить приложению, объекты какого типа будут передаваться), чтобы получить возможность работать с осмысленными данными. В вашем случае это контейнер однотипных объектов User.
  2. Сформировать класс. В нашем случае:

    public class Rootobject
    {
        public User[] users { get; set; }
    }
    public class User
    {
        public string id_lib { get; set; }
        public string name { get; set; }
        public string surname { get; set; }
        public string group { get; set; }
        public string date_of_taking { get; set; }
        public string lib_card { get; set; }
        public string name_book { get; set; }
    }
    

Сгенерировать код класса самостоятельно вы можете, если используете Visual Studio, через меню Правка -> Специальная вставка. Передайте туда содержимое JSON из буфера обмена.

  1. Выполнить десериализацию объекта (привести его из вида, удобного для передачи) в вид, удобный для работы программиста. Как это делается, можно посмотреть здесь (вам нужен метод Deserialize)

  2. Вывести объект(ы) для отображения.

READ ALSO
Проблема с поиском числа инверсий в массиве через алгоритм MergeSort

Проблема с поиском числа инверсий в массиве через алгоритм MergeSort

Есть рабочий алгоритм MergeSortНужно модифицировать его так, чтобы он по совместительству находил и число инверсий в массиве

332
Не меняется тема в приложении Android на axml

Не меняется тема в приложении Android на axml

Пытаюсь убрать верхнюю строку с названием приложения и поменять тему с черной на белую с помощью параметра

199
Всплывающие подсказки с data-hint

Всплывающие подсказки с data-hint

Добрый день, столкнулся с HTML в рамках лабораторной работы, более легкие задания удалось выполнить, а здесь не понимаю, как связать нестандартный...

224
Руководство по изучению JavaScript

Руководство по изучению JavaScript

Пробная версия по написанию книг, в данном случае по языку JavaScriptПодробнее здесь: Как мы хотим начать писать Книги сообщества?

261