所以我有一个City类,我希望能够获取并存储JSON数据。
public string status { get; set; }
public string id { get; set; }
public string country { get; set; }
public string region { get; set; }
public string mainCity { get; set; }
public string latitude { get; set; }
public string longitude { get; set; }
public string comment { get; set; }
public bool wasThereAnError { get; set; }
public class CityResponse
{
public string status { get; set; }
public string Message { get; set; }
public List<City> result { get; set; }
}
在我的应用程序中,我需要通过ID请求城市或按国家/地区代码显示城市列表,以便我希望城市成为基类。
以下是我尝试使用的代码。它位于WebRetrieval类
中 async private Task<City> GetCityInformation(string url)
{
var client = new HttpClient();
var response = await client.GetAsync(new Uri(url));
string result = await response.Content.ReadAsStringAsync();
//var cityRootaaa = JsonConvert.DeserializeObject<City.CityResponse>(result);
var cityRoot = JsonConvert.DeserializeObject<City>(result);
return cityRoot;
}
//Return City
async public Task<City> GetCity(string url)
{
City city = await GetCityInformation(url);
return city;
}
然后当我尝试在City_Page类中创建一个City对象时,我使用它:
long cityNum = Convert.ToInt64(CityID_Textbox.Text);
string url = "http://honey.computing.dcu.ie/city/city.php?id=" + cityNum;
City city = wr.GetCity(url);
myTextBlock1.Text = city.ToString();
我不断收到关于System.Threading.tasks.task的错误,无法转换为CityApp.City。
我真的很难过,我不知道该怎么办。现在代码坏了,我不知道如何解决它。所以我真的很感激任何帮助。 感谢
答案 0 :(得分:2)
更改
City city = wr.GetCity(url);
到
City city = wr.GetCity(url).Result;
如果您使用的是.Net 4.0;如果你使用4.5,那么
City city = await wr.GetCity(url);
此外,您将返回CityResponse而不仅仅是一个城市; Json无法反序列化,因为它缺少[]来定义数组。如果您执行以下操作
var cityResponse = new CityResponse();
cityResponse.status = "okay";
cityResponse.result = new List<City>();
var city = new City();
city.Status = "0";
city.Id = "1";
city.Country = "2";
city.Region = "3";
city.MainCity = "4";
city.Latitude = "5";
city.Longitude = "6";
city.Comment = "7";
city.WasThereAnError = false;
cityResponse.result.Add(city);
var jsonString = JsonConvert.SerializeObject(cityResponse);
jsonString将是
“{\” 状态\ “:\” 好\”,\ “消息\”:空,\ “结果\”:[{\ “状态\”:\ “0 \”,\ “ID \” :\ “1 \” \ “国家\”:\ “2 \” \ “区域\”:\ “3 \” \ “MainCity \”:\ “4 \” \ “纬度\”:\ “5 \”,\ “经度\”:\ “6 \”,\ “评论\”:\ “7 \”,\ “WasThereAnError \”:假}]}“
答案 1 :(得分:1)
您的GetCity
方法为async
,因此您必须await
才能获得City
而不是Task<City>
。
City city = await wr.GetCity(url);
答案 2 :(得分:1)
GetCity已经等待,应该撤回City而不是Task。
答案 3 :(得分:1)
要添加到其他答案,您应该删除SerializeObject
语句,只需将字符串反序列化为City
对象。
//result = JsonConvert.SerializeObject(response);
var city = JsonConvert.DeserializeObject<City>(result);