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