2016-06-15 3 views
0

json으로 온라인 기상 데이터를 얻고 json을 deserialize하여 사용 가능한 객체로 변환하려고합니다. 여기에 내 코드입니다 :Json String을 객체에 비 직렬화하기

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입니다. 나는 이미 모든 수업을 정의했습니다 (길기 때문에 중요하다면 게시 할 것입니다. 그렇지 않으면 필요하다고 생각하지 않습니다). 나는 전에 이런 일을 한적 없다. 그래서 이것의 대부분은 내가 찾은 여기에있는 다른 코드 예제에서 나온 것이지만, 분명히 나는 ​​그 객체들을 항상 맞춰 놓지 않았다. 왜냐하면 내 객체는 항상 null이지만 URL로 갈 때이다. 거기에 유효한 XML이 있습니다. 어떻게 든 내 코드에서 json으로 XML을 변환해야하는지, 아니면 어떻게 든 완료되고 있는지 확실하지 않습니다. 내가 말했듯이, 나는 정말로 내가하고있는 일을 알지 못한다. 그러나 누군가에게 제안이 있다면 그것은 좋을 것이다.

+0

JavaScriptSerializer 대신 Json.NET을 사용하십시오. 그리고 Json과 clasess를 보여주세요. – BWA

+0

자신의 클래스를 사용하여 더미 예측을 만든 다음 * serialize *하면 JSON을 웹 서비스에서 얻은 것과 비슷하게 만들 수 있습니까? –

+0

디버거에'string json = weather.getJson (url); 바로 뒤에 중단 점을 넣고'json' 변수가 예상대로 채워지는지 확인하십시오. – Falanwe

답변

0

dynamic data = serializer.Deserialize(json); 

을 시도하고 디버거에서 데이터 객체를 검사 - 당신이 필요로하는 데이터를 얻을 수있는 고정 된 인터페이스로 deserialise 필요하지 않을 수 있습니다. 동적 인 사용은 서비스에 대한 업그레이드를 처리하는보다 강력한 솔루션 일 수도 있습니다.이 솔루션은 설정된 인터페이스/개체를 더 취약하게 만듭니다.