0
我试图从网上获取天气数据作为json,然后将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数据对象,它里面有一个“预测”对象,它应该包含的其他信息的列表,而是它是空的。我已经定义了所有的类(它们很长,所以如果它很重要,我会发布它们,否则我认为我不需要)。我从来没有做过这样的事情,因此大部分来自我在这里找到的其他代码示例,但显然我没有正确地将它们放在一起,因为我的对象始终为空,但是当我转到url时,那里有有效的xml。我不确定是否需要以某种方式将xml转换为json,或者以某种方式完成该操作?就像我说的,我真的不知道我在做什么,但如果有人有建议,那会很棒。
而不是JavaScriptSerializer使用Json.NET。并显示Json和clasess。 – BWA
当你使用你自己的类建立一个虚拟预测,然后* serialize *,你会得到类似于你从web服务中获得的JSON吗?在你的调试器中调用 –
,在'string json = weather.getJson(url);'后面加上一个断点,看看'json'变量是否按照预期填充。 – Falanwe