У меня есть метод, который получает список сотрудников из 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; }
}