可以使用的HttpWebRequest调用Web服务API,XML库的响应串.NET对象转换。 下面是一个简单的例子(它得到的错误消息作为我没有一个有效的密钥“提供了无效的API访问密钥”):
static void Main(string[] args)
{
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(
@"http://www.ctabustracker.com/bustime/api/v1/gettime?key=89dj2he89d8j3j3ksjhdue93j"
);
using (WebResponse resp = req.GetResponse())
{
using (Stream respStream = resp.GetResponseStream())
{
using(StreamReader reader = new StreamReader(respStream))
{
String respString = reader.ReadToEnd();
Debug.WriteLine(respString);
TestBusTimeResponse response = XmlUtil.DeserializeString<TestBusTimeResponse>(respString);
Debug.WriteLine(response.Error.Message);
}
}
}
Console.ReadLine();
}
其中XmlUtil.DeserializeString定义为:
public static T DeserializeString<T>(String content)
{
using (TextReader reader = new StringReader(content))
{
XmlSerializer s = new XmlSerializer(typeof(T));
return (T)s.Deserialize(reader);
}
}
和TestBusTimeResponse被定义为(实际上,你可以生成XML模式该业务对象类的API文档中指定,使用xsd效用随VS):
[XmlRoot("error")]
public class TestBusTimeResponseError
{
[XmlElement("msg")]
public String Message
{
get;
set;
}
}
// Response in the following format:
// <?xml version="1.0"?>
// <bustime-response><error><msg>Invalid API access key supplied</msg></error></bustime-response>
[XmlRoot("bustime-response")]
public class TestBusTimeResponse
{
[XmlElement("error")]
public TestBusTimeResponseError Error
{
get;
set;
}
}
会简单WebRequest吗? – user1096188 2012-03-07 19:20:14
@ user1096188这是接近我想要的,但它会将响应序列化为对象对我来说?如何定义所述对象,是否有工具?或者我需要自己处理XML与XmlSerializer? – Jay 2012-03-07 19:34:19