我如何 return 来自 JSON 对象的列表?
How do I return a List from a JSON object?
我正在用 Xamarin Forms 构建我的第一个应用程序,它将通过网络请求从 SQL 数据库中读取信息。
我已经到了可以在 WinForms 应用程序中成功读取和显示信息的地步。虽然,在 Xamarin Forms 中我似乎无法得到相同的结果。
在主页上我调用:
var jobService = new JobService();
listView.ItemsSource = jobService.JobList(DatePicker.Date);
然后,在 JobService 中 class 这是我的代码。
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
}
这就是工作 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
returns 为 null
。在 UploadValuesAsync
完成之前是否被归还?
我正在使用 Visual Studio 2019 (16.6.0),.NET 4.8 版。我也在使用 Newtonsoft.Json 数据包。
提前致谢!
感谢您的所有回复。我通过使用 HttpClient
并了解有关 async
/ await
的更多信息来解决问题。这是我的代码。老实说,我觉得我对这个主题的了解还不够多,因此我对它没有信心,所以如果有人认为代码可以更简洁,请随时详细说明:)
这是我当前的(工作)代码:
在主页上我调用:
var jobService = new JobService();
var jobList = await jobService.JobListAsync(DatePickerInvisible.Date); //I will use this list for further display actions.
然后,在 JobService class 这是我的代码:
class JobService
{
string userId;
string date;
public List<Job> Jobs { get; private set; }
HttpClient client = new HttpClient();
public async Task<List<Job>> JobListAsync(DateTime datetime)
{
userId = 1234;
date = datetime.ToString("MM-dd-yyyy");
Jobs = new List<Job>();
var uri = new Uri("http://Location/webservice.php");
IEnumerable<KeyValuePair<string, string>> queries = new List<KeyValuePair<string, string>>()
{
new KeyValuePair<string, string>("UserId", userId),
new KeyValuePair<string, string>("Date", date)
};
HttpContent q = new FormUrlEncodedContent(queries);
try
{
var response = await client.PostAsync(uri, q);
if (response.IsSuccessStatusCode)
{
var content = await response.Content.ReadAsStringAsync();
Jobs = JsonConvert.DeserializeObject<List<Job>>(content);
}
}
catch (Exception ex)
{
Debug.WriteLine(@"ERROR {0}", ex.Message);
}
return Jobs;
}
}
作业 Class 保持不变。
再次感谢您对我的帮助。你的评论加在一起让我走上了正确的道路。
我正在用 Xamarin Forms 构建我的第一个应用程序,它将通过网络请求从 SQL 数据库中读取信息。 我已经到了可以在 WinForms 应用程序中成功读取和显示信息的地步。虽然,在 Xamarin Forms 中我似乎无法得到相同的结果。
在主页上我调用:
var jobService = new JobService();
listView.ItemsSource = jobService.JobList(DatePicker.Date);
然后,在 JobService 中 class 这是我的代码。
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
}
这就是工作 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
returns 为 null
。在 UploadValuesAsync
完成之前是否被归还?
我正在使用 Visual Studio 2019 (16.6.0),.NET 4.8 版。我也在使用 Newtonsoft.Json 数据包。
提前致谢!
感谢您的所有回复。我通过使用 HttpClient
并了解有关 async
/ await
的更多信息来解决问题。这是我的代码。老实说,我觉得我对这个主题的了解还不够多,因此我对它没有信心,所以如果有人认为代码可以更简洁,请随时详细说明:)
这是我当前的(工作)代码:
在主页上我调用:
var jobService = new JobService();
var jobList = await jobService.JobListAsync(DatePickerInvisible.Date); //I will use this list for further display actions.
然后,在 JobService class 这是我的代码:
class JobService
{
string userId;
string date;
public List<Job> Jobs { get; private set; }
HttpClient client = new HttpClient();
public async Task<List<Job>> JobListAsync(DateTime datetime)
{
userId = 1234;
date = datetime.ToString("MM-dd-yyyy");
Jobs = new List<Job>();
var uri = new Uri("http://Location/webservice.php");
IEnumerable<KeyValuePair<string, string>> queries = new List<KeyValuePair<string, string>>()
{
new KeyValuePair<string, string>("UserId", userId),
new KeyValuePair<string, string>("Date", date)
};
HttpContent q = new FormUrlEncodedContent(queries);
try
{
var response = await client.PostAsync(uri, q);
if (response.IsSuccessStatusCode)
{
var content = await response.Content.ReadAsStringAsync();
Jobs = JsonConvert.DeserializeObject<List<Job>>(content);
}
}
catch (Exception ex)
{
Debug.WriteLine(@"ERROR {0}", ex.Message);
}
return Jobs;
}
}
作业 Class 保持不变。
再次感谢您对我的帮助。你的评论加在一起让我走上了正确的道路。