Я пытаюсь отобразить все данные из 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.





Сообщение об ошибке сообщает вам, что не так: вы не можете установить источник данных представления сетки на VouchersResultSet, потому что он не реализует ни один из интерфейсов, о которых знает представление сетки.
Я подозреваю, что вы хотите установить его на ваучеры в VouchersResultSet:
GridView1.DataSource = vouchersResult.Vouchers;
Однако вы, вероятно, захотите сначала проверить, является ли результат успешным или неудачным, чтобы вы могли отображать соответствующее сообщение об ошибке вместо пустой сетки при ошибке.