使用天气预报api(中国天气网)获取城市天气(2)---httpclient和json操作

接上一篇文章

从中国天气网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);


截取后的json字符串对其反序列化返回相应的cityinfo:

 return JsonConvert.DeserializeObject<CityInfo>(jsonString);


Newtonsoft.Json    详细操作:


序列化:

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
linq操作:

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#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值