2016-06-15 3 views
0

Я пытаюсь получить данные о погоде из онлайн как json, а затем десериализую json в объект, который я могу использовать. Вот мой код:Deserialize Json String to Object

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

Вместо JavaScriptSerializer использовать Json.NET. И покажи Джону и Классе. – BWA

+0

Когда вы создаете прогноз-манекен, используя свои собственные классы, а затем * сериализуете *, вы получаете JSON, похожий на то, что вы получаете от веб-службы? –

+0

в вашем отладчике, поставьте точку останова сразу после 'string json = weather.getJson (url);' и посмотрите, заполняется ли переменная 'json', как и ожидалось. – Falanwe

ответ

0

Попробуйте

dynamic data = serializer.Deserialize(json); 

, а затем проверить объект данных в отладчике - вам может не понадобиться deserialise к фиксированному интерфейс, чтобы получить из данных, что вам нужно. Использование dynamic также может быть более надежным решением для решения проблем с обновлением службы, которая может сделать более сложным интерфейс/объект.