2015-05-14 42 views
1

我已經開始構建一個應用程序來從World Weather Online獲取潮汐信息,天氣信息,地圖繪製等功能,但無法獲得JSON響應。試圖通過JSON.net接收JSON

我已經通過NuGet安裝了JSON.net,我正在運行Windows 8.1。我只能通過將我的JSON URL粘貼到實際的瀏覽器中來查看數據。然後在json2sharp上使用它的輸出來創建下面我的代碼的底部。

嘗試http://www.codeproject.com/Tips/397574/Use-Csharp-to-get-JSON-Data-from-the-Web-and-Map-iHow to get a json string from url?

using System; 
using System.Net; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using GMap.NET.WindowsForms; 
using GMap.NET; 
using GMap.NET.MapProviders; 
using System.Xml.Linq; 
using System.Xml; 
using System.IO; 
using System.Web; 
using Newtonsoft.Json.Linq; 
using Newtonsoft.Json; 
using RestSharp; 
using Newtonsoft.Json.Utilities; 





namespace EOD_Assistant 
{ 


    public partial class Form1 : Form 
    { 

     public Form1() 
     { 
      InitializeComponent(); 



     } 

     private void myMap_Load(object sender, EventArgs e) 
     { 
      myMap.MapProvider = BingHybridMapProvider.Instance; 
      myMap.SetPositionByKeywords("Comox, Canada"); 
      myMap.MinZoom = 1; 
      myMap.MaxZoom = 17; 
      myMap.Zoom = 10; 
      myMap.CanDragMap = true; 
      myMap.MapScaleInfoEnabled = true; 

     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      string url = "http://api.worldweatheronline.com/free/v2/weather.ashx?q=Campbell%20River&format=json&num_of_days=5&callback=rrr&key=1ccf49ff57a386e570286ae9294b9"; 

     } 

     private void GetWeather() 
     { 
     } 

     private void weatherBtn_Click(object sender, EventArgs e) 
     { 

     } 

     public class WeatherDesc 
     { 
      public string value { get; set; } 
     } 

     public class WeatherIconUrl 
     { 
      public string value { get; set; } 
     } 

     public class CurrentCondition 
     { 
      public string cloudcover { get; set; } 
      public string FeelsLikeC { get; set; } 
      public string FeelsLikeF { get; set; } 
      public string humidity { get; set; } 
      public string observation_time { get; set; } 
      public string precipMM { get; set; } 
      public string pressure { get; set; } 
      public string temp_C { get; set; } 
      public string temp_F { get; set; } 
      public string visibility { get; set; } 
      public string weatherCode { get; set; } 
      public List<WeatherDesc> weatherDesc { get; set; } 
      public List<WeatherIconUrl> weatherIconUrl { get; set; } 
      public string winddir16Point { get; set; } 
      public string winddirDegree { get; set; } 
      public string windspeedKmph { get; set; } 
      public string windspeedMiles { get; set; } 
     } 

     public class Request 
     { 
      public string query { get; set; } 
      public string type { get; set; } 
     } 

     public class Astronomy 
     { 
      public string moonrise { get; set; } 
      public string moonset { get; set; } 
      public string sunrise { get; set; } 
      public string sunset { get; set; } 
     } 

     public class WeatherDesc2 
     { 
      public string value { get; set; } 
     } 

     public class WeatherIconUrl2 
     { 
      public string value { get; set; } 
     } 

     public class Hourly 
     { 
      public string chanceoffog { get; set; } 
      public string chanceoffrost { get; set; } 
      public string chanceofhightemp { get; set; } 
      public string chanceofovercast { get; set; } 
      public string chanceofrain { get; set; } 
      public string chanceofremdry { get; set; } 
      public string chanceofsnow { get; set; } 
      public string chanceofsunshine { get; set; } 
      public string chanceofthunder { get; set; } 
      public string chanceofwindy { get; set; } 
      public string cloudcover { get; set; } 
      public string DewPointC { get; set; } 
      public string DewPointF { get; set; } 
      public string FeelsLikeC { get; set; } 
      public string FeelsLikeF { get; set; } 
      public string HeatIndexC { get; set; } 
      public string HeatIndexF { get; set; } 
      public string humidity { get; set; } 
      public string precipMM { get; set; } 
      public string pressure { get; set; } 
      public string tempC { get; set; } 
      public string tempF { get; set; } 
      public string time { get; set; } 
      public string visibility { get; set; } 
      public string weatherCode { get; set; } 
      public List<WeatherDesc2> weatherDesc { get; set; } 
      public List<WeatherIconUrl2> weatherIconUrl { get; set; } 
      public string WindChillC { get; set; } 
      public string WindChillF { get; set; } 
      public string winddir16Point { get; set; } 
      public string winddirDegree { get; set; } 
      public string WindGustKmph { get; set; } 
      public string WindGustMiles { get; set; } 
      public string windspeedKmph { get; set; } 
      public string windspeedMiles { get; set; } 
     } 

     public class Weather 
     { 
      public List<Astronomy> astronomy { get; set; } 
      public string date { get; set; } 
      public List<Hourly> hourly { get; set; } 
      public string maxtempC { get; set; } 
      public string maxtempF { get; set; } 
      public string mintempC { get; set; } 
      public string mintempF { get; set; } 
      public string uvIndex { get; set; } 
     } 

     public class Data 
     { 
      public List<CurrentCondition> current_condition { get; set; } 
      public List<Request> request { get; set; } 
      public List<Weather> weather { get; set; } 
     } 

     public class RootObject 
     { 
      public Data data { get; set; } 
     } 

     public class PleaseWORK 
     { 
      private static T _download_serialized_json_data<T>(string url) where T : new() 
      { 
       using (var w = new WebClient()) 
       { 
        var json_data = string.Empty; 
        // attempt to download JSON data as a string 
        try 
        { 
         json_data = w.DownloadString(url); 
        } 
        catch (Exception) { } 
        // if string with JSON data is not empty, deserialize it to class and return its instance 
        return !string.IsNullOrEmpty(json_data) ? JsonConvert.DeserializeObject<T>(json_data) : new T(); 
       } 
      } 
     } 
    } 
} 
+3

我不知道無論您正在使用的溢價或免費版本,但在無論如何,你絕對不應該分享你的API密鑰。 。 。 (如果是優質的人可以使用它,你最終會付錢) –

+0

你應該澄清究竟是怎麼回事。拋出什麼異常,等等。 –

回答

1

協議在URL

string url = "http://api.worldweatheronline.com/free/v2/weather.ashx?q=Campbell%20River&format=json&num_of_days=5&callback=rrr&key=xxxxxxxxxxxxxxxxxxxxxxx"; 
using (var webClient = new System.Net.WebClient()) 
{ 
    var json = webClient.DownloadString(url); //THIS GIVES ME AN EXCEPTION ERROR....DUNNO WHY. 

} 

並通過API returnd JSON字符串缺少的是不正確的,它以 「RRR」(在課程的寫作的時間)

+0

非常感謝。沒有更多的錯誤,除了我現在無法填充信息。或者說我無法使用它。當我放入代碼來使用它時,我得到一個錯誤。我試圖像這樣調用它,當我推動天氣按鈕var rootObject = _download_serialized_json_data (url);但它不會。 –

+0

json字符串不正確,它以rrr開頭... –

0
開始
string url = "http://api.worldweatheronline.com/free/v2/weather.ashx?q=Campbell%20River&format=json&num_of_days=5&callback=rrr&key=1ccf49ff57a386e570286ae9294b9"; 
       var jsonString = web.DownloadString(url).ToString(); 
       var parseJsonString = jsonString.Split('(', ')')[1]; 
       var obj = JsonConvert.DeserializeObject<RootObject>(parseJsonString); 

這個作品,快來看......

0

你可以得到JSON字符串以這種方式

// httpWebRequest with API URL 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create 
     ("http://YourURL.com"); 

     //Method GET 
     request.Method = "GET"; 

     //HttpWebResponse for result 
     HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 


     //Mapping of status code 
     if (response.StatusCode == HttpStatusCode.OK) 
     { 
      Stream receiveStream = response.GetResponseStream(); 
      StreamReader readStream = null; 

      if (response.CharacterSet == "") 
       readStream = new StreamReader(receiveStream); 
      else 
       readStream = new StreamReader(receiveStream, Encoding.GetEncoding(response.CharacterSet)); 

      //Get news data in json string 
      string data = readStream.ReadToEnd(); 
} 

之後,您可以將該字符串轉換爲DataSet也是這樣。

DataSet ds = new DataSet(); 
StringReader reader = new StringReader(data); 
ds.ReadXml(reader); 
0

您使用的URL不正確。

要得到有效的JSON,你應該使用:

http://api.worldweatheronline.com/free/v2/weather.ashx?q=Campbell%20River&format=json&num_of_days=5&key=xxxxxxxxxxxxxxxxxxxxx 

唯一的區別是,我拿出&callback=rrr