【发布时间】:2020-10-06 21:40:58
【问题描述】:
我正在 Xamarin Forms 中构建我的第一个应用程序,它将通过 Web 请求从 SQL 数据库中读取信息。 我已经到了在 WinForms 应用程序中成功读取和显示信息的地步。不过,在 Xamarin Forms 中,我似乎无法得到相同的结果。
在我调用的主页上:
var jobService = new JobService();
listView.ItemsSource = jobService.JobList(DatePicker.Date);
然后,在 JobService 类中,这是我的代码。
class JobService
{
List<Job> jobs;
string userId;
string date;
public List<Job> JobList(DateTime datetime)
{
userId = 1234;
date = datetime.ToString("MM-dd-yyyy");
Client();
return jobs;
}
public void Client()
{
WebClient client = new WebClient();
Uri uri = new Uri("http://Location/webservice.php");
NameValueCollection parameters = new NameValueCollection();
parameters.Add("UserId", userId);
parameters.Add("Date", date);
client.UploadValuesCompleted += Client_UploadValuesCompleted;
client.UploadValuesAsync(uri, parameters);
}
public void Client_UploadValuesCompleted(object sender, UploadValuesCompletedEventArgs e)
{
jobs = JsonConvert.DeserializeObject<List<Job>>(Encoding.UTF8.GetString(e.Result));
}
在 WinForms 中这是我的代码
private void Button_Click(object sender, EventArgs e)
{
WebClient client = new WebClient();
Uri uri = new Uri("http://Location/webservice.php");
NameValueCollection parameters = new NameValueCollection();
parameters.Add("UserId", 1234);
parameters.Add("Date", datetime.ToString("MM-dd-yyyy"));
client.UploadValuesCompleted += Client_UploadValuesCompleted;
client.UploadValuesAsync(uri, parameters);
}
private void Client_UploadValuesCompleted(object sender, UploadValuesCompletedEventArgs e)
{
List<Job> jobs = JsonConvert.DeserializeObject<List<Job>>(Encoding.UTF8.GetString(e.Result));
MessageBox.Show(jobs[0].Project); //Project is one of the properties of the Job Class
}
这是作业类:
public class Job
{
[JsonProperty("Project")]
public string Project { get; set; }
[JsonProperty("Service")]
public string Service { get; set; }
[JsonProperty("Client")]
public string Client { get; set; }
[JsonProperty("StartTime")]
public string StartTime { get; set; }
[JsonProperty("EndTime")]
public string EndTime { get; set; }
[JsonProperty("Date")]
public string Date { get; set; }
}
在调试 Xamarin 解决方案时,我注意到 jobs 返回为 null。是否在UploadValuesAsync 完成之前返回?
我使用的是 Visual Studio 2019 (16.6.0),.NET 版本 4.8。我也在使用 Newtonsoft.Json 数据包。
提前致谢!
【问题讨论】:
-
JSON 的结构如何?你有一个例子吗?你的
Job班级呢? -
嗨!我已将工作类添加到帖子中。一个例子:我将用户名和日期发送到 php webservice。它返回一个 JSON 对象,其中包含 Job Class 中列出的属性。我是新手,所以我不确定 JSON 的结构是怎样的,但我可以将它反序列化为一个列表。在 PHP 文件中,我调用 ''echo json_encode($list);'这有什么用吗?
-
我所说的示例的意思是拥有实际的 JSON 内容。在您的代码中,您有一个
Encoding.UTF8.GetString(e.Result)。那包含什么?如果它与您定义的结构不匹配,它将像您看到的那样失败。乍一看,我怀疑它可能是您使用的JsonProperty属性。最有可能的是,它们需要是project、service、client等。 -
嗨,Sotiris,感谢您的帮助!返回的 JSON 字符串如下所示: [{"Project":"Project1","Service":"Knitting","Client":"Client1","StartTime":"09:00","EndTime": "17:00","日期":"01-01-2020"}]。作业类在 WinForms 项目中是相同的,它在其中工作。那将排除更改属性名称的可能性吗?
-
尝试将您的
Client()设置为Task<void>并在JobList中设置await Client();
标签: c# json xamarin xamarin.forms webclient