2011-12-05 33 views
7

Tôi cần kết nối với điểm cuối để phân phối JSON qua giao diện REST. Tôi thực sự không thể tìm thấy bất cứ thứ gì kết hợp hai công nghệ này một cách mạch lạc.Tìm kiếm REST với thư viện máy khách JSON

Tôi đang tìm thư viện sẽ cho phép tôi bắt đầu nhanh chóng.

+0

Một vài blog cho thấy cách thực hiện điều này bằng cách sử dụng WCF https://encrypted.google.com/search?q=wcf+rest+json – oleksii

+0

@oleksii Hầu hết các chi tiết liên kết đều cách tạo một dịch vụ đưa ra JSON. Tôi cần một thư viện để dễ dàng tiêu thụ nó. – AngryHacker

Trả lời

8

Bạn có thể sử dụng Json.Net thư viện và extension class này mà làm cho sử dụng DynamicObject

Một số ví dụ sử dụng:

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); 
    } 
} 

EDIT:

Dưới đây là một mẫu mà không 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"); 
     } 
    } 
} 
+0

Thật không may, tôi bị mắc kẹt với .NET 3.5 theo thẻ, do đó không thể sử dụng 'dynamic'. – AngryHacker

+0

Xin lỗi, tôi đã bỏ lỡ điều đó. Nhưng bạn vẫn có thể sử dụng thư viện Json.Net để phân tích các chuỗi json được trả về ('JObject.Parse' hoặc' JsonConvert.DeserializeObject') –

+0

@AngryHacker, tôi đã chỉnh sửa câu trả lời của mình, tránh các tính năng .NET4. –

1

ServiceStack.Text có lẽ là một trong những cách dễ nhất để làm điều này.

nền: ServiceStack.Text là một độc lập, phụ thuộc miễn phí thư viện serialization có chứa chức năng xử lý văn bản ServiceStack của

Ví dụ

using ServiceStack.Text; 

// Create our arguments object: 
object args = new 
{ 
    your = "Some", 
    properties = "Other", 
    here = "Value", 
}; 

var resultString = fullUrl.PostJsonToUrl(args); 
results = resultString.Trim().FromJson<T>(); 

Các phương pháp PostJsonToUrlFromJson phần mở rộng là một số cú pháp đẹp đường trong quan điểm của tôi.

Các vấn đề liên quan