我已经创建了一个基本的ASP.Net Web应用程序,我正在尝试使用OpenWeatherMap API。 (第一次处理API)。
我对WebAPI的信息是:
您可以按城市名称每3小时搜索5天的天气预报。可以使用JSON和XML格式获取所有天气数据。 有可能在API响应中接收具有其自己的参数(地理坐标/ id /名称)的城市/城镇的中心区域。例 API调用: api.openweathermap.org/data/2.5/forecast?q={city name},{country code} 参数: q城市名称和国家/地区代码除以逗号,使用ISO 3166国家/地区代码 API调用的示例:
api.openweathermap.org/data/2.5/forecast?q=London,us&mode=xml
目前,当我使用返回json对象的api
时,我的工作正常api.openweathermap.org/data/2.5/weather?q=London&units=metric
但是,如果我只是将URL更改为第一个(返回XML),我的应用程序将不再从API检索数据。
我尝试将mode = xml修改为mode = json,但仍然无效。
如何使用第一个Web API?
非常感谢
- 编辑:
在我的模型课中,我有以下方法:
string url = "api.openweathermap.org/data/2.5/…;
var client = new WebClient();
var content = client.DownloadString(url);
var serializer = new JavaScriptSerializer();
var jsonContent = serializer.Deserialize<Object>(content);
return jsonContent;
(取出密钥)然后我从我的视图中调用此方法。但是我不能使用最后有
答案 0 :(得分:0)
你的问题是当结果以xml的形式返回时,你使用JavaScriptSerializer
来反序列化它。
xml不是json,因此Deserialization
将失败
您需要的是XmlSerializer
来解除结果
下面是一些可以帮助您入门的代码:
string url = @"http://samples.openweathermap.org/data/2.5/forecast?q=London&appid=b1b15e88fa797225412429c1c50c122a1&mode=xml";
var client = new WebClient();
var content = client.DownloadString(url);
XmlSerializer serializer = new XmlSerializer(typeof(weatherdata));
weatherdata result = null;
using (TextReader reader = new StringReader(content))
{
result = (weatherdata)serializer.Deserialize(reader);
}
注意typeof weatherdata
- 如果要反序列化为对象,则无需反序列化为非强类型对象,
有迹象表明你可以做到这一点。
如果您不想手动编写强类型模型,请将xml结果复制到剪贴板然后使用VS(不确定其他版本,但2017年为例)工具栏
Edit -> paste special -> Paste xml as classes
为您生成强类型