2016-06-15 54 views
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,或者以某種方式完成該操作?就像我說的,我真的不知道我在做什麼,但如果有人有建議,那會很棒。

+0

而不是JavaScriptSerializer使用Json.NET。並顯示Json和clasess。 – BWA

+0

當你使用你自己的類建立一個虛擬預測,然後* serialize *,你會得到類似於你從web服務中獲得的JSON嗎?在你的調試器中調用 –

+0

,在'string json = weather.getJson(url);'後面加上一個斷點,看看'json'變量是否按照預期填充。 – Falanwe

回答

0

嘗試

dynamic data = serializer.Deserialize(json); 

,然後檢查在調試器中的數據對象 - 你可能不需要deserialise到一個固定的接口來獲得你所需要的數據。使用動態可能也是更強大的解決方案來處理服務的升級,可能會使設置的界面/對象變得更脆弱。