Преобразование json в C# и отображение в gridview

Я пытаюсь отобразить все данные из json веб-сервиса в gridview или некоторых столбцов в gridview:

namespace WebApplication3
{
public partial class WebForm1 : System.Web.UI.Page
{
    public class LoginInfo
    {
        public string access_token { get; set; }
    }
    public enum ServiceResultEnums
    {
        Success,
        BadData,
        ServerError
    }
    public class VouchersResultSet
    {
        public VouchersResultSet()
        {
            Success = false;
            ResultCode = ServiceResultEnums.ServerError;
        }

        /// <summary>
        /// Does the web call was successful or not
        public bool Success { get; set; }

        /// <summary>
        /// Web call result
        public ServiceResultEnums ResultCode { get; set; }

        /// <summary>
        /// Helper message in english -- not required
        public string EnglishMessage { get; set; }

        /// <summary>
        /// Helper message in arabic - not required
        public string ArabicMessage { get; set; }

        /// <summary>
        /// Field to contain debug data 
        public string Debug { get; set; }

        /// <summary>
        /// Field to send any need info while debugging
        public object dump { get; set; }
        public List<VoucherViewModel> Vouchers { get; set; } =       new    List<VoucherViewModel>();

    }
    public class VoucherViewModel
    {

        public long Id { get; set; }
        public int GroupNumber { get; set; }
        public string GroupName { get; set; }
        public int CountryId { get; set; }
        public string CountryName { get; set; }
        public string Status { get; set; }

    }


    public class GetVouchersParam
    {
        public bool HideExpired { get; set; } = true;
        public bool HideCancelled { get; set; } = true;
        public VoucherPaymentStatus PaymentStatus { get; set; }
        public long VoucherNumber { get; set; }
        public DateTime? IssueDateFrom { get; set; }
        public DateTime? IssueDateTo { get; set; }
        public DateTime? PaymentDateFrom { get; set; }
        public DateTime? PaymentDateTo { get; set; }
        public bool ArabicLanguage { get; set; } = true;
        public short[] CountrysIds { get; set; } = new short[0];
        public int[] AgentsIds { get; set; } = new int[0];
    }
    /// <summary>
    /// Voucher Payment Status
    /// </summary>
    public enum VoucherPaymentStatus
    {
        All,
        Paid,
        Unpaid
    }


    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            var userName = ""; //Set UserName here
            var password = ""; //Set Password here
            var client = new WebClient
            {
                Encoding = Encoding.UTF8
            };
            client.Headers.Add("Content-Type", "application/x-www-form-urlencoded");

            //Login
            var loginResult = client.UploadString("https://Printo.com/test/token", "grant_type=password&username = " + userName + "&password = " + password);
            var loginInfo = JsonConvert.DeserializeObject<LoginInfo>(loginResult);

            //Get Vouchers
            if (loginInfo != null && loginInfo.access_token != null && loginInfo.access_token.Length > 0)
            {
                client.Headers.Clear();
                client.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
                client.Headers.Add("Authorization", "bearer " + loginInfo.access_token);
                var searchParams = new GetVouchersParam { IssueDateFrom = new DateTime(2018, 6, 1), IssueDateTo = new DateTime(2018, 6, 7), PaymentStatus = VoucherPaymentStatus.Paid };

                var result = client.UploadString("http://printo.com/printo/api/alltest/test1", JsonConvert.SerializeObject(searchParams));
                var vouchersResult = JsonConvert.DeserializeObject<VouchersResultSet>(result);
                GridView1.DataSource = vouchersResult;
            }
        }
        catch (Exception ex)
        {

            throw;
        }
    }

Однако при выполнении приведенного ниже кода я получаю сообщение об ошибке:

Data source is an invalid type. It must be either an IListSource, IEnumerable, or IDataSource.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
46
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Сообщение об ошибке сообщает вам, что не так: вы не можете установить источник данных представления сетки на VouchersResultSet, потому что он не реализует ни один из интерфейсов, о которых знает представление сетки.

Я подозреваю, что вы хотите установить его на ваучеры в VouchersResultSet:

GridView1.DataSource = vouchersResult.Vouchers;

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

Другие вопросы по теме