none
Serializar en JSON el resultado de un procedimiento almacenado RRS feed

  • Pregunta

  • Creo un objeto cs

    public class Productos
        {
            private string nombreProducto;
            private string descripcion;
            private string codigo;

            public string NombreProducto { get => nombreProducto; set => nombreProducto = value; }
            public string Descripcion { get => descripcion; set => descripcion = value; }
            public string Codigo { get => codigo; set => codigo = value; }
        }

    Y en la página aspx.cs Me gustaría serializarlo a JSON y no se como hacerlo

    Tengo esto pero es totalmente incorrecto y no se hacerlo

     protected void btnListaUsuarios_Click(object sender, EventArgs e)
            {
                HttpWebResponse res = null;
                StreamReader SReader = null;
                String ResultadoCadena;

                Producto pr = new Producto(); Productos Produ = new Productos();
                DataTable dt = new DataTable();

                dt = pr.cargarLista();

                try
                {
                    HttpWebRequest WReq = (HttpWebRequest)HttpWebRequest.Create(dt);
                    WReq.ContentType = "application/json; charset=UTF-8";
                    WReq.Method = "GET";
                    res = (HttpWebResponse)WReq.GetResponse();
                    Encoding Codificacion = ASCIIEncoding.UTF8;
                    SReader = new StreamReader(res.GetResponseStream(), Codificacion);

                    ResultadoCadena = SReader.ReadToEnd();
                    lblResultado.Text = ResultadoCadena;
                }
                catch (WebException Exc)
                {
                    var webResponse = (HttpWebResponse)Exc.Response;
                    StreamReader Lector = new StreamReader(webResponse.GetResponseStream());
                    string error = Lector.ReadToEnd();

                }
                finally
                {
                    if (SReader != null)
                        SReader.Dispose();
                    if (res != null)
                        res.Close();
                }

    ¿Como se saca una cadena JSON de un procedimiento almacenado?

    Gracias

    miércoles, 4 de noviembre de 2020 16:37

Todas las respuestas

  • ¿Como se saca una cadena JSON de un procedimiento almacenado?

    Se hace en dos fases:

    Lo primero hay que llamar al procedimiento almacenado y cargar el resultado en una estructura en memoria, como por ejemplo un List<Productos>. Esto se puede hacer de muchas maneras distintas, dependiendo de cómo hayas configurado el acceso a datos. Si tienes ya configurado un ORM tal como Entity Framework (EF) para que llame al procedimiento, entonces el propio EF te devolverá ya directamente el List<Productos>. Si no tienes un ORM sino que estás usando directamente ADO.NET, entonces usas un SqlDataReader para traer los datos, y en un bucle vas instanciando Productos, cargando una por una las propiedades desde el SqlDataReader, y añadiendo cada Productos al List hasta que el SqlDataReader ya no devuelva nada.

    En cualquier caso, lo anterior es completamente "standard" y habitual cuando traes datos desde la base de datos a un objeto en memoria. No tiene nada que ver el hecho de que los datos provengan de un procedimiento almacenado en lugar de otro tipo de consulta, ni tiene nada que ver el hecho de que lo hagas desde una página aspx, ni tiene nada que ver el hecho de que luego lo vayas a pasar a JSON. Es una carga normal de datos desde base de datos a un objeto en memoria. Me imagino que esto ya lo has hecho muchas veces y lo tienes dominadísimo.

    Y después de eso ya viene la segunda parte. Una vez que tienes los datos cargados en memoria, tienes que aplicar un serializador JSON para convertirlos a JSON. Existen muchos serializadores JSON, pero uno de los más conocidos es NewtonSoft.Json. Lo puedes añadir a tu proyecto directamente como paquete Nuget desde el repositorio Nuget predeterminado en Visual Studio.

    Una vez que lo tengas, los datos se convierten a JSON con una única línea de código:

    using Newtonsoft.Json;
    ...
    List<Productos> miLista = ...; // Aquí es donde has cargado antes los datos
    
    string json = JsonConvert.SerializeObject(miLista);
    

    Eso te devuelve el JSON en la variable "json".

    miércoles, 4 de noviembre de 2020 17:16
    Moderador
  • Hola Jesús Prieto,

    ¿Alguna novedad sobre tu pregunta? ¿Han sido útiles las respuestas proporcionadas? Por favor no olvides marcar una respuesta si resolviste tu consulta (debajo de cada post hay una opción que dice "Marcar como respuesta").

     

    Saludos cordiales

    Gabriel Castro

     ____________________________ 

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    lunes, 16 de noviembre de 2020 22:34
    Moderador