2011-12-05 11 views
7

Necesito conectarme a un punto final que sirve JSON a través de las interfaces REST. Realmente no puedo encontrar nada que combine estas 2 tecnologías de manera coherente.Buscando un RESTO con la biblioteca del cliente JSON

Estoy buscando una biblioteca que me permita comenzar rápidamente.

+0

Algunos blogs muestran cómo hacerlo usando WCF https://encrypted.google.com/search?q=wcf+rest+json – oleksii

+0

@oleksii La mayoría de los enlaces detallan cómo crear un servicio que entregue JSON. Necesito una biblioteca para consumirla fácilmente. – AngryHacker

Respuesta

8

Puede utilizar Json.Net biblioteca y esta extension class que hace uso de DynamicObject

Algunos ejemplos de uso:

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:

Aquí es otra muestra sin 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

Desafortunadamente, estoy atrapado con .NET 3.5 según la etiqueta, por lo tanto no puedo usar 'dynamic'. – AngryHacker

+0

Lo siento, me lo perdí. Pero aún puede usar la biblioteca Json.Net para analizar las cadenas json devueltas ('JObject.Parse' o' JsonConvert.DeserializeObject') –

+0

@AngryHacker, edité mi respuesta, evitando las características .NET4. –

1

ServiceStack.Text es probablemente una de las maneras más fáciles de hacerlo.

Antecedentes: ServiceStack.Text es una biblioteca de serialización independiente, libre de dependencia que contiene funcionalidad de procesamiento de texto de ServiceStack

Ejemplo

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

Los PostJsonToUrl y FromJson métodos de extensión son algunos agradable sintáctica azúcar en mi opinión.

Cuestiones relacionadas