接上一篇文章
从中国天气网api获取的信息是以json格式记录的,需要对json进行操作。由于接口比较简单,这里json只涉及json与object的序列化与反序列化操作:
这里使用 Newtonsoft.Json 提供的操作:
首先提供引用:
using Newtonsoft.Json;
实现:
public static async Task<CityInfo> getCityInfoByIdAsync(string id)
{
var requestUri=string.Format("http://www.weather.com.cn/data/sk/{0}.html",id);
var cityinfo =await httpClient.GetStringAsync(requestUri).ContinueWith<Task<CityInfo>>(
async json =>
{
string jsonString = await json;
jsonString = jsonString.Substring(15, jsonString.Length - 16);
return JsonConvert.DeserializeObject<CityInfo>(jsonString);
}
);
return await cityinfo;
}
该方法把首先httpclint的get获取返回的字符串:
httpClient.GetStringAsync(requestUri)
然后对字符串进行操作:
{"weatherinfo":{"city":"西安","cityid":"101110101","temp":"34","WD":"东北风","WS":"3级","SD":"34%","WSE":"3","time":"14:00","isRadar":"1","Radar":"JC_RADAR_AZ9290_JB"}}
由于返回的json字符串有用的信息只有
{"city":"西安","cityid":"101110101","temp":"34","WD":"东北风","WS":"3级","SD":"34%","WSE":"3","time":"14:00","isRadar":"1","Radar":"JC_RADAR_AZ9290_JB"}
故对其进行截取:
jsonString = jsonString.Substring(15, jsonString.Length - 16);
return JsonConvert.DeserializeObject<CityInfo>(jsonString);
序列化:
Product product = new Product();
product.Name = "Apple";
product.Expiry = new DateTime(2008, 12, 28);
product.Sizes = new string[] { "Small" };
string json = JsonConvert.SerializeObject(product);
//{
// "Name": "Apple",
// "Expiry": "2008-12-28T00:00:00",
// "Sizes": [
// "Small"
// ]
//}
反序列化:
string json = @"{
'Name': 'Bad Boys',
'ReleaseDate': '1995-4-7T00:00:00',
'Genres': [
'Action',
'Comedy'
]
}";
Movie m = JsonConvert.DeserializeObject<Movie>(json);
string name = m.Name;
// Bad Boys
JArray array = new JArray();
array.Add("Manual text");
array.Add(new DateTime(2000, 5, 23));
JObject o = new JObject();
o["MyArray"] = array;
string json = o.ToString();
// {
// "MyArray": [
// "Manual text",
// "2000-05-23T00:00:00"
// ]
// }
JsonSchema schema = JsonSchema.Parse(@"{
'type': 'object',
'properties': {
'name': {'type':'string'},
'hobbies': {'type': 'array'}
}
}");
JObject person = JObject.Parse(@"{
'name': 'James',
'hobbies': ['.NET', 'LOLCATS']
}");
bool valid = person.IsValid(schema);
// true
参考:http://hi.baidu.com/xyz136299110/item/3d7bbfdf94a8d41cd78ed0e3
http://msdn.microsoft.com/zh-cn/library/system.net.http.httpclient(v=vs.118).aspx
http://james.newtonking.com/json/help/index.html#