我需要连接到通过REST接口提供JSON的端点。我真的找不到以一致的方式将这两种技术结合在一起的东西。
我正在寻找一个可以让我快速入门的图书馆。
您可以使用Json.Net库,这个扩展类是利用了DynamicObject
DynamicObject
一些用法示例:
public static void GoogleGeoCode(string address) { string url = "http://maps.googleapis.com/maps/api/geocode/json?sensor=true&address="; dynamic googleResults = new Uri(url + address).GetDynamicJsonObject(); foreach (var result in googleResults.results) { Console.WriteLine("[" + result.geometry.location.lat + "," + result.geometry.location.lng + "] " + result.formatted_address); } } public static void GoogleSearch(string keyword) { string url = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&rsz=8&q="; dynamic googleResults = new Uri(url + keyword).GetDynamicJsonObject(); foreach (var result in googleResults.responseData.results) { Console.WriteLine( result.titleNoFormatting + "\n" + result.content + "\n" + result.unescapedUrl + "\n"); } } public static void Twitter(string screenName) { string url = "https://api.twitter.com/1/users/lookup.json?screen_name=" + screenName; dynamic result = new Uri(url).GetDynamicJsonObject(); foreach (var entry in result) { Console.WriteLine(entry.name + " " + entry.status.created_at); } } public static void Wikipedia(string query) { string url = "http://en.wikipedia.org/w/api.php?action=opensearch&search=" + query +"&format=json"; dynamic result = new Uri(url).GetDynamicJsonObject(); Console.WriteLine("QUESTION: " + result[0]); foreach (var entry in result[1]) { Console.WriteLine("ANSWER: " + entry); } }
编辑:
这是另一个没有 DynamicObject
public static void GoogleSearch2(string keyword) { string url = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&rsz=8&q="+keyword; using(WebClient wc = new WebClient()) { wc.Encoding = System.Text.Encoding.UTF8; wc.Headers["User-Agent"] = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E)"; string jsonStr = wc.DownloadString(url); JObject jObject = (JObject)JsonConvert.DeserializeObject(jsonStr); foreach (JObject result in jObject["responseData"]["results"]) { Console.WriteLine( result["titleNoFormatting"] + "\n" + result["content"] + "\n" + result["unescapedUrl"] + "\n"); } } }