我正在尝试从json在线获取天气数据,然后将json反序列化为我可以使用的对象。这是我的代码:
public static RootObject7 GetWeather7(int zip)
{
var url = "http://api.weatherunlocked.com/api/forecast/us." + zip.ToString() + "?app_id=xxxxxxx&app_key=xxxxxxxxxxxxxxxxxxxxxxx";
var weather = new wunlocked();
string json = weather.getJson(url);
JavaScriptSerializer serializer = new JavaScriptSerializer();
var data = (RootObject7)serializer.Deserialize<RootObject7>(json);
return data;
}
private string getJson(string url)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
try
{
WebResponse response = request.GetResponse();
using (Stream responseStream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
return reader.ReadToEnd();
}
}
catch (WebException ex)
{
WebResponse errorResponse = ex.Response;
using (Stream responseStream = errorResponse.GetResponseStream())
{
StreamReader reader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8"));
String errorText = reader.ReadToEnd();
}
throw;
}
}
我正在调试,正在发生的是我正在创建的RootObject7数据对象,并且里面有一个“预测”对象,它应该包含其他信息的列表,但它是空的。我已经定义了所有类(它们很长,所以如果它很重要,我会发布它们,否则我认为不需要)。我之前从未做过这样的事情,因此大部分内容来自我发现的其他代码示例,但显然我没有正确地将它们放在一起,因为我的对象总是为null但是当我转到url时,那里有有效的xml。我不确定我是否需要以某种方式将xml转换为我的代码中的json,或者是否以某种方式完成?就像我说的,我真的不知道我在做什么,但如果有人有建议,那就太好了。
答案 0 :(得分:0)
尝试
dynamic data = serializer.Deserialize(json);
然后检查调试器中的数据对象 - 您可能不需要反序列化到固定接口以获取所需的数据。使用动态也可能是一个更强大的解决方案来处理可能使设置的接口/对象更脆弱的服务升级。