我从天气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它会返回所有数据,遗憾的是我不知道如何获取 具体数据
答案 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;