从OpenWeatherMap API将XML对象转换为JSON

时间:2017-08-08 20:34:16

标签: c# json xml asp.net-mvc

我已经创建了一个基本的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; 

(取出密钥)然后我从我的视图中调用此方法。但是我不能使用最后有

1 个答案:

答案 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为您生成强类型