1-我通过 MVC 创建一个 API 来获取
string MaUserName,
string MaPassword,
int MaId,
int MaStatus,
string MaFullName
它与 Postman 和 swagger 配合得很好
2-我创建了一个项目,其中有
Manager.cs
LoginVM.cs
LoginPage.xaml
MainPage.xaml
和
BaseViewModel : INotifyPropertyChanged
当我输入用户名和密码时
public async Task<int> ExecuteLoginCommand(string username, string password)
通过此代码成功后进入主页即可。
我的 API 接收该用户的用户名、密码和返回的 ID——它工作正常。
我在 API 中有其他方法接收 ID 并返回该 ID 的所有日期 当我将 id 发送到此方法时,我收到了字符串形式的所有信息。 通过 JSON 转换器 我从中得到
MaFullName
- 好吧。
结束后
public async Task<int> ExecuteLoginCommand(string username, string password)
Model>Manager 的所有值 = null - 这是问题
我将展示所有代码
public partial class Manager
{
public int MaId { get; set; }
public string MaUsername { get; set; } = null!;
public string MaPassword { get; set; }
public string MaFullname { get; set; }
public int? MaStatus { get; set; }
}
public partial class LoginVM : BaseViewModel
{
private string _username;
private string _password;
private string _fullname ;
private bool _isUsernameValid;
private bool _isPasswordValid;
public int id = 0;
private readonly HttpClient _httpClient;
public ICommand LoginCommand { get; set; }
public string Username
{
get => _username;
set => SetProperty(ref _username, value);
}
public string Password
{
get => _password;
set => SetProperty(ref _password, value);
}
public bool IsUsernameValid
{
get { return _isUsernameValid; }
set
{
if (_isUsernameValid != value)
{
_isUsernameValid = value;
OnPropertyChanged();
}
}
}
public bool isPasswordValid
{
get { return _isPasswordValid; }
set
{
if (_isPasswordValid != value)
{
_isPasswordValid = value;
OnPropertyChanged();
}
}
}
public string MaFullname
{
get => _fullname ?? "Error";
set
{
if (_fullname != value)
{
_fullname = value;
OnPropertyChanged();
}
}
}
public LoginVM()
{
_httpClient = new HttpClient();
LoginCommand = new Command(async () => await ExecuteLoginCommand(Username, Password));
}
// check user and password
public async Task<int> ExecuteLoginCommand(string username, string password)
{
HttpResponseMessage responseu = await _httpClient.GetAsync("http://127.0.0.1:5000/api/Managers/GetManagersu/" + username + "," + password);
int isUsernameValid = await responseu.Content.ReadFromJsonAsync<int>();
if (responseu.IsSuccessStatusCode && isUsernameValid != 0)
{
id = isUsernameValid;
HttpResponseMessage responseid = await _httpClient.GetAsync("http://127.0.0.1:5000/api/Managers/" + id);
string jsonfullname = await responseid.Content.ReadAsStringAsync();
JsonConvert.DeserializeObject<Manager>(jsonfullname);
// _fullname = manager.MaFullname;
Console.WriteLine(MaFullname);
await Shell.Current.GoToAsync($"//MainPage");
return (isUsernameValid);
}
else
{
return 0;
}
} // end excutedlogincommand
}
public class BaseViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName] string name = "") =>
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
protected bool SetProperty<T>(ref T backingField, T value, [CallerMemberName] string propertyName = null)
{
if (EqualityComparer<T>.Default.Equals(backingField, value)) return false;
backingField = value;
OnPropertyChanged(propertyName);
return true;
}
}
运行此应用程序,登录页面
登录后
我应该看到“我的全名” 但这一行有“错误”:
public string MaFullname
{
get => _fullname ?? "Error";
ExecuteLoginCommand()
之后设置一个静态值,就可以了MaFullName
if (responseu.IsSuccessStatusCode && isUsernameValid != 0)
{
id = isUsernameValid;
HttpResponseMessage responseid = await _httpClient.GetAsync("http://127.0.0.1:5000/api/Managers/" + id);
string jsonfullname = await responseid.Content.ReadAsStringAsync();
JsonConvert.DeserializeObject<Manager>(jsonfullname);
// _fullname = manager.MaFullname;
Console.WriteLine(MaFullname);
await Shell.Current.GoToAsync($"//MainPage");
return (isUsernameValid);
}
从您分享的上面的代码中,我们可以发现您想使用代码
JsonConvert.DeserializeObject<Manager>(jsonfullname);
来反序列化Object,但是您没有将结果分配给任何变量,例如类Manager
的实例或将其分配给变量public string MaFullname
在你的 LoginVM
。
因此,您将无法通过代码
MaFullname
在LoginVM.cs
中获得正确的Console.WriteLine(MaFullname);
值。
您可以参考以下代码来反序列化对象:
//code snippet
object obj= JsonConvert.DeserializeObject<Manager>(jsonfullname);
if (obj != null && obj is Manager)
{
Manager item = obj as Manager;
MaFullname = item.MaFullname;
}