【问题标题】:Convert json to c# and Displaying in gridview [closed]将json转换为c#并在gridview中显示[关闭]
【发布时间】:2018-06-10 07:41:08
【问题描述】:

我正在尝试将所有数据从 webservice 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;
        }
    }

但是,执行以下代码时出现错误:

数据源是无效类型。它必须是 IListSource、IEnumerable 或 IDataSource。

【问题讨论】:

    标签: c# sql json web-services


    【解决方案1】:

    错误消息告诉您出了什么问题:您不能将网格视图的数据源设置为VouchersResultSet,因为它没有实现网格视图知道的任何接口。

    我怀疑您想要做的是将其设置为 VouchersResultSet 内的凭证:

    GridView1.DataSource = vouchersResult.Vouchers;
    

    但是,您可能希望首先检查结果是成功还是失败结果,以便在失败时显示适当的错误消息而不是空网格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-08
      • 1970-01-01
      • 2020-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多