servicio recorrer leer crear consumir c# json web-services

recorrer - servicio web json c#



La mejor manera de llamar a un servicio web JSON desde una consola.NET (3)

Estoy alojando un servicio web en ASP.Net MVC3 que devuelve una cadena Json. ¿Cuál es la mejor manera de llamar al servicio web desde la aplicación ac # console y analizar el retorno en un objeto .NET?

¿Debo hacer referencia a MVC3 en mi aplicación de consola?

Json.Net tiene algunos buenos métodos para serializar y deserializar objetos .NET, pero no veo que tenga formas de POSTING y GETing values ​​desde un servicio web.

¿O debería simplemente crear mi propio método de ayuda para POSTing y GETing para el servicio web? ¿Cómo serializaría mi objeto .net a pares clave de valores?


Aunque las respuestas existentes son enfoques válidos, son anticuadas. HttpClient es una interfaz moderna para trabajar con servicios web RESTful. Verifique la sección de ejemplos de la página en el enlace, tiene un caso de uso muy sencillo para un HTTP GET asíncrono.


Utilizo HttpWebRequest para GET desde el servicio web, que me devuelve una cadena JSON. Se ve algo como esto para un GET:

// Returns JSON string string GET(string url) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); try { WebResponse response = request.GetResponse(); using (Stream responseStream = response.GetResponseStream()) { StreamReader reader = new StreamReader(responseStream, System.Text.Encoding.UTF8); return reader.ReadToEnd(); } } catch (WebException ex) { WebResponse errorResponse = ex.Response; using (Stream responseStream = errorResponse.GetResponseStream()) { StreamReader reader = new StreamReader(responseStream, System.Text.Encoding.GetEncoding("utf-8")); String errorText = reader.ReadToEnd(); // log errorText } throw; } }

Luego uso JSON.Net para analizar dinámicamente la cadena. Alternativamente, puede generar la clase C # estáticamente a partir de la salida JSON de muestra utilizando esta herramienta codeplex: http://jsonclassgenerator.codeplex.com/

POST se ve así:

// POST a JSON string void POST(string url, string jsonContent) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST"; System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding(); Byte[] byteArray = encoding.GetBytes(jsonContent); request.ContentLength = byteArray.Length; request.ContentType = @"application/json"; using (Stream dataStream = request.GetRequestStream()) { dataStream.Write(byteArray, 0, byteArray.Length); } long length = 0; try { using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { length = response.ContentLength; } } catch (WebException ex) { // Log exception and throw as for GET example above } }

Utilizo un código como este en las pruebas automatizadas de nuestro servicio web.


WebClient para buscar los contenidos de la url remota y JavaScriptSerializer o JSON.Net para deserializar el JSON en un objeto .NET. Por ejemplo, usted define una clase modelo que reflejará la estructura JSON y luego:

using (var client = new WebClient()) { var json = client.DownloadString("http://example.com/json"); var serializer = new JavaScriptSerializer(); SomeModel model = serializer.Deserialize<SomeModel>(json); // TODO: do something with the model }

También hay algunos marcos de cliente REST que puede pagar, como RestSharp .