C#和weather API,获取特定数据

时间:2017-01-11 11:43:51

标签: c#

我从天气API获取数据,我想只返回特定数据,让我们说湿度不是整个对象。

public Object getWeatherForcast()
    {
        string url = "http://api.openweathermap.org/data/2.5/weather?q=Aalborg&APPID=appid&units=imerial";

        var client = new WebClient();
        var content = client.DownloadString(url);
        var serializer = new JavaScriptSerializer();
        var jsonContent = serializer.Deserialize<Object>(content);

        //here if I use only jsonContent it returns all data, unfortunately I don t know how to get
        //the specific data
        return jsonContent.main.humidity;


    }

这里如果我只使用jsonContent它会返回所有数据,遗憾的是我不知道如何获取         具体数据

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:0)

不建议反序列化为Object类型,而是建议您反序列化为您自己的对象类型,例如天气报告或类似内容,以便您可以执行以下操作:

WeatherReport report = serializer.Deserialize<WeatherReport>(content);

这对你来说很容易。

无论如何,鉴于你拥有的东西,你可以做这样的事情:

jsonContent.main[2].ToString(); //Or whatever other method or property you prefer

答案 1 :(得分:0)

最好准备一个代表你想要从JSON读取的数据的类,如前所述,但是如果你想保持它的方式,或者只是读取单个值(例如来自“main”的湿度) “部分),您可以将dynamic与以下小代码段一起使用:

var jsonContent = serializer.Deserialize<dynamic>(content);
var humidity = jsonContent["main"]["humidity"];

修改

在您的情况下JavaScriptSerializer将对象反序列化为Dictionary<string, object>,因此您必须使用索引器访问它的属性,如上所示。如果您使用Newtonsoft.Json库反序列化JSON,也可以使用dynamic,您可以获得类似以下内容的清洁示例,使用属性访问数据:

var jsonContent = JsonConvert.DeserializeObject<dynamic>(content);
humidity = jsonContent.main.humidity;