none
Linq to Json RRS feed

  • Pregunta

  • Amigos buenos días.

    Tengo la necesidad de hacer lo siguiente:

    1. Crear un servicio REST el cual me retorne en formato Json el resultado de una consulta hecha con LINQ.

    2. Del lado de mi página WEB leer ese Json que regresó el servicio REST.

    He leído varios artículos relacionados con este tema, pero no logro determinar la forma exacta en que debo trabajarlo, ya que nunca he hecho un servicio REST ni tampoco he trabajado con Json.

    Hasta el momento mis WEBSERVICES habían sido ASMX y si usaba LINQ de esta forma:

    En una clase tengo esto:

    [Serializable]
    public class Bancos
    {
        public string Banco { get; set; }
        public string Descripcion { get; set; }
    }

    Y luego en mi WEBSERVICE ASMX tengo este WEBMETHOD:

        [WebMethod]
        public Bancos[] DevuelveBancosInterconsumo()
        {
            dbDataContext db = new dbDataContext();
    
            var q = from b in db.MF_Bancos
                    orderby b.NOMBRE
                    select new Bancos()
                    {
                        Banco = b.BANCO.ToString(),
                        Descripcion = b.NOMBRE
                    };
    
            return q.ToArray();
        }
    
    

    Por último, en mi página WEB uso lo retornado para asignarlo a un combo, para otros casos, lo retornado se lo asigno a un GRID.

                var ws = new wsPuntoVenta.wsPuntoVenta();
    
                var q = ws.DevuelveBancosInterconsumo().ToList();
    
                cbBanco.DataSource = q;
                cbBanco.DataTextField = "Descripcion";
                cbBanco.DataValueField = "Descripcion";
                cbBanco.DataBind();
    

    Entonces, mi necesidad es hacer esto mismo pero con un servicio REST y que me retorne los datos en Json y luego asignar esos datos al combo como fue en este caso.

    Agradezco de antemano toda la ayuda que me puedan dar, ya que como les comentaba, estoy en blanco en servicios REST y Json.

    Saludos.


    Rop

    jueves, 22 de diciembre de 2016 13:33

Respuestas

  • hola

    >>una vez ya tengo el string de Json del lado del cliente,

    porque un string de json? eso no es correcto, un webapi puede devolver json sin necesidad que sea un string,es mas no necesitas convertir la entidad porque webapi lo hace directo

    una vez que tengas el json deberias trabajarlo dependiendo el componente donde lo necesites usar, si es un combo podrias iterar usando el

    $.each(datos, function(index, item){

       //aqui generas el option del combo

    });

    en este caso datos seria el json

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    sábado, 24 de diciembre de 2016 3:34

Todas las respuestas

  • hola

    pero conoces algo sobre asp.net mvc ? porqueno es simple si tienes los conceptos basicos

    ASP.NET Web API

    Getting Started with ASP.NET Web API 2 (C#)

    la llamada desde el cliente la realizas usando HttpClient

    Calling a Web API From a .NET Client (C#)

    aqui no hay service reference como en los servicios web

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    jueves, 22 de diciembre de 2016 14:21
  • Hola Rolando,

    La manera más facil de mapear clases C# a Json es utilizando la libreria Newtonsoft (Es la que más utilizamos los desarrolladores para estos menesteres). Es super fácil de utilizar.

    En el sitio web encontrarás varios ejemplos muy prácticos: http://www.newtonsoft.com/json

    Espero te sirva,

    Un saludo


    Camilo Bernal
    Desarrollador
    Bogotá, Colombia

    jueves, 22 de diciembre de 2016 14:23
  • hola Camilo

    pero desde una web api no se necesita mapear ningun json usando la libreria de newtonsoft

    si se retorna una List<> o class, este lo devolvera directo como json

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 22 de diciembre de 2016 14:36
  • Hola Leandro, difiero solo un poco de tu respuesta. Web api de manera nativa no convierte (unicamente) a JSON ya que utiliza Content Negotiation (https://www.asp.net/web-api/overview/formats-and-model-binding/content-negotiation) 

    Por lo que el content type de la respuesta dependerá de la petición y de la configuración de web api. Prueba de ello es que si haces un llamado GET a un web api directo desde un navegador, Firefox, por ejemplo, la respuestá será diferente que en Internet Explorer, por ejemplo. En uno devolverá JSON y en otro XML.

    Obviamente, se puede modificar este comportamiento de Web API con algo de configuración para que responda según la necesidad.

    Entonces, si quiero estar absolutamente seguro que Web Api va a devolver siempre JSON:

    a. Configuro Web api para que siempre responda en JSON (http://www.julitogtu.com/2013/01/22/asp-net-web-api-respondiendo-en-json/) Alternativa que no le plantee a Rolando para no complicarlo con temas de configuración   o....

    b. Me aseguro que la respuesta sea siempre JSON formateando el response a JSON utilizando alguna libreria como Newtonsoft (o a mano).

    Saludos,



    Camilo Bernal
    Desarrollador
    Bogotá, Colombia


    jueves, 22 de diciembre de 2016 16:51
  • hola

    >>Web api de manera nativa no convierte (unicamente) a JSON ya que utiliza Content Negotiation

    ok es verdad, pero es lo mas comun si defines un JsonResult y usas

    public JsonResult xxNombreAction(){
    
       var datos = ...;
    
       return Json(datos);
    
    }

    aunque lo correcto seria un IHttpActionResult

    >>Me aseguro que la respuesta sea siempre JSON formateando el response a JSON utilizando alguna libreria como Newtonsoft (o a mano).

    pero con eso estarias retornando un json serializado a string

    si se va a usar webapi el cliente puede indicar el tipo de respuesta que necesita, por eso se usa el HttpClient

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 22 de diciembre de 2016 19:17
  • Amigos gracias por sus respuestas.

    Ahora, una vez ya tengo el string de Json del lado del cliente, como puedo asignarlo a un combo o bien a un grid?

    Nuevamente gracias.


    Rop

    viernes, 23 de diciembre de 2016 13:16
  • hola

    >>una vez ya tengo el string de Json del lado del cliente,

    porque un string de json? eso no es correcto, un webapi puede devolver json sin necesidad que sea un string,es mas no necesitas convertir la entidad porque webapi lo hace directo

    una vez que tengas el json deberias trabajarlo dependiendo el componente donde lo necesites usar, si es un combo podrias iterar usando el

    $.each(datos, function(index, item){

       //aqui generas el option del combo

    });

    en este caso datos seria el json

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    sábado, 24 de diciembre de 2016 3:34