Результаты вызова API в System.InvalidCastException: указанное приведение недопустимо - PullRequest
0 голосов
/ 13 апреля 2019

У меня есть метод, который получает список сотрудников из API, а затем сохраняет их в ObservableCollection для отображения в ListView. Однако мне не повезло, так как я продолжаю получать эту ошибку «System.InvalidCastException: указанное приведение недействительно».

Я думал, что это был список, но, к моему удивлению, даже удаление назначения все равно приводило к падению приложения. Что мне показалось интересным, так это то, что после API был завершен и var employees был заполнен, и код возвращался к закрывающей фигурной скобке вызова API перед возвратом указанной ошибки. Буду признателен за любую оказанную помощь. Пожалуйста, смотрите мой код ниже:

ViewModel

public class EmployeeListViewModel : BaseViewModel
{
    private IUserService _userService { get; set; }
    public EmployeeListViewModel(IUserService userService)
    {
        _userService = userService;
        GetEmployees();
    }

    private async void GetEmployees()
    {
        var employees = await _userService.GetEmployees();
        Employees = new MvxObservableCollection<User>(employees);
    }

    private MvxObservableCollection<User> _employees;
    public MvxObservableCollection<User> Employees
    {
        get => _employees;
        set { SetProperty(ref _employees, value); }
    }
}

Услуги

public async Task<List<User>> GetEmployees()
{
    string url = $"{IpAddress}/{_controllerRoute}/getemployees";
    var content = await _httpClient.GetStringAsync(url);
    return JsonConvert.DeserializeObject<List<User>>(content);
}

Модель

public class User
//Simply copying IdentityUser, as this is the object being returned from the server
{
    public virtual string Id { get; set; }
    public virtual string UserName { get; set; }
    public virtual string NormalizedUserName { get; set; }
    public virtual string Email { get; set; }
    public virtual string NormalizedEmail { get; set; }
    public virtual bool EmailConfirmed { get; set; }
    public virtual string PasswordHash { get; set; }
    public virtual string SecurityStamp { get; set; }
    public virtual string ConcurrencyStamp { get; set; }
    public virtual string PhoneNumber { get; set; }
    public virtual bool PhoneNumberConfirmed { get; set; }
    public virtual bool TwoFactorEnabled { get; set; }
    public virtual DateTime? LockoutEnd { get; set; }
    public virtual bool LockoutEnabled { get; set; }
    public virtual int AccessFailedCount { get; set; }
}
...