作为一个新手,在实习的时候接触了web service,当时感觉十分新奇,就在网上搜索了一些web service,做了一些个比如天气查询之类的东西,但是网上提供的大部分的接口是通过http请求来实现的,所以就萌发了想要用C#发出http请求来实现天气查询的想法。
C#是通过HttpWebRequest类和HttpWebResponseL类来实现http请求的发出和http响应的接收的,由于本人刚用这两个类,不是太熟悉,所以属性和方法就不在这里给大家讲解了。
代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Xml;
using System.Web;
using System.IO;
using System.Runtime.Serialization.Json;
using System.Runtime.Serialization;
namespace httpTest
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入您要查询的地区!");
string region = Console.ReadLine();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://api.36wu.com/Weather/GetWeather?district="+region);
request.Method = "GET";
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
StreamReader stream = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string jsonstr = stream.ReadLine();
var ser = new DataContractJsonSerializer(typeof(weater));
var ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonstr));
weater sn = (weater)ser.ReadObject(ms);
Console.WriteLine("{0}的当前气温是{1}",region,sn.data.temp);
Console.ReadKey();
}
}
[DataContract]
class weater
{
[DataMember]
public int status { get; set; }
[DataMember]
public string message { get; set; }
[DataMember]
public data data { get; set; }
}
[DataContract]
class data
{
[DataMember]
public string dateTime { get; set; }
[DataMember]
public string city { get; set; }
[DataMember]
public string temp { get; set; }
[DataMember]
public string minTemp { get; set; }
[DataMember]
public string maxTemp { get; set; }
[DataMember]
public string weathe { get; set; }
[DataMember]
public string windDirection { get; set; }
[DataMember]
public string windForce { get; set; }
[DataMember]
public string humidity { get; set; }
[DataMember]
public string img_1 { get; set; }
[DataMember]
public string img_2 { get; set; }
[DataMember]
public string refreshTime { get; set; }
}
}
这里我用的是控制台程序,其中比较简单,我就不一一解释了,其中需要注意的一点是得到的json是
{
"status": 200,
"message": "OK",
"data": {
"dateTime": "2014年3月23日",
"city": "北京",
"temp": "17℃",
"minTemp": "7℃",
"maxTemp": "20℃",
"weather": "晴转阴",
"windDirection": "南风",
"windForce": "2级",
"humidity": "26%",
"img_1": "0",
"img_2": "2",
"refreshTime": "13:18"
}
}
所以在写类的时候要注意,同时 [DataContract] [DataMember] 不能够少,不然无法解析json字符串。