2014-01-23 28 views
1

写作,我在这里得到JSONReaderExceptions:我怎样才能构建一个try/catch在C#中的变量定义

var container = JsonConvert.DeserializeObject<HistoryResponseContainer> (responseData); 

它总是像一个无端接线路或无法识别的字符。

我知道我需要捕获并抛出这些错误,但如果尝试在try/catch语句中定义“容器”,它会中断。这是整个方法。

foreach (String StationID in StationIDList) { 

      string url = @"http://api.wunderground.com/api/" + wundergroundkey + "/history_" + Date + "https://stackoverflow.com/q/pws:" + StationID + ".json"; 
      Uri uri = new Uri (url); 
      WebRequest webRequest = WebRequest.Create (uri); 
      WebResponse response = webRequest.GetResponse(); 
      StreamReader streamReader = new StreamReader (response.GetResponseStream()); 
      String responseData = streamReader.ReadToEnd(); 

      var container = JsonConvert.DeserializeObject<HistoryResponseContainer> (responseData); 

      foreach (var observation in container.history.observations) { 

       CurrentData.Write (StationID + " "); 
       // This makes easier access to the date. not perfect, but better. 
       DateTime date = observation.date.Value; 
       DateTime utc = observation.utcdate.Value; 

       // whatever you want to do with each observation 
       if (date.Minute == 0 || date.Minute % 5 == 0) { 
        CurrentData.Write (date.Hour + ":" + date.Minute + " " + observation.wdird + " " + observation.wspdi); 
       }//end if 

       CurrentData.Write ("\n"); 

      } //End foreach observation 

     } //end foreach station 
+1

你是什么意思,它呕吐? –

回答

2

把你的第二个foreach循环内尝试(因为你使用你的“容器”)。否则,如果抛出一个异常也不会被定义,你只有“try/catch语句”你的容器instanciation:

foreach (String StationID in StationIDList) 
{ 
    string url = @"http://api.wunderground.com/api/" + wundergroundkey + "/history_" + Date + "https://stackoverflow.com/q/pws:" + StationID + ".json"; 
    Uri uri = new Uri (url); 
    WebRequest webRequest = WebRequest.Create (uri); 
    WebResponse response = webRequest.GetResponse(); 
    StreamReader streamReader = new StreamReader (response.GetResponseStream()); 
    String responseData = streamReader.ReadToEnd(); 

    try 
    { 
     var container = JsonConvert.DeserializeObject<HistoryResponseContainer> (responseData); 

     foreach (var observation in container.history.observations) 
     { 
      CurrentData.Write (StationID + " "); 
      DateTime date = observation.date.Value; 
      DateTime utc = observation.utcdate.Value; 

      if (date.Minute == 0 || date.Minute % 5 == 0) 
      { 
       CurrentData.Write (date.Hour + ":" + date.Minute + " " + observation.wdird + " " + observation.wspdi); 
      } 

      CurrentData.Write ("\n"); 

     } 
    } 
    catch(JsonReaderException ex) 
    { 
     // ... 
    } 
} 
0

我知道我需要赶上并抛出这些错误,

不,你只需要抓住并处理这些错误。

但它呕吐,如果我尝试在try/catch语句内定义“容器”。

这是什么意思?你需要这个:

try 
{ 
    // your code that throws exception 
} 
catch(JsonReaderException ex) 
{ 
    // handle your exception 
} 
相关问题