none
Como deserialize(DatagridView) json Windows Form c# RRS feed

  • Pregunta

  • Estoy serializando y quiero deserealizar dentro un datagridview y no encuentro la manera..

    private void Json()
    {
        string sql = @"SELECT 
                            cod,
                            Format(fecha, 'Short Date') as fecha,
                            Format(hora, 'Short Time') as hora,
                            1 as Tipo
                        FROM Registro";
    
        OleDbDataAdapter d = new OleDbDataAdapter(sql, connection);
        DataSet ds = new DataSet();
        d.Fill(ds);
        var n = JsonConvert.SerializeObject(ds);
        textBox1.Text = n;
    
       // textBox1.Text = n.Remove(1, 8);//Aqui veo mi cadena serialisada 
    
        //  var dataTable = JsonConvert.DeserializeObject<DataTable>(n.Remove(1, 8)); /// Intente cargarla de esta manera y no sale
    
        DataTable dtValue = (DataTable)JsonConvert.DeserializeObject(n, (typeof(DataTable))); //// otro intento
    
        dataGridView1.DataSource = dtValue;
    }

    Mi json:

    {"Table":[
    {"cod":46897,"fecha":"6/3/2018","hora":"10:34","Tipo":1},{"cod":46929,"fecha":"6/3/2018","hora":"10:35","Tipo":1},{"cod":46972,"fecha":"6/3/2018","hora":"10:35","Tipo":1}
    ]}

    otro intento

    var n = JsonConvert.SerializeObject(ds);
    textBox1.Text = n;
    var objResponse1 =   JsonConvert.DeserializeObject<List<RegistroModel>>(n);
    dataGridView1.DataSource = objResponse1;


    lunes, 12 de marzo de 2018 15:32

Respuestas

Todas las respuestas

  • hola

    un dataset no se serializa a json, a lo sumo podrias hacerlo a xml usando

    DataSet.WriteXml

    si necesitas json deberias crear clase y listas

    utiliza el datareader para iterar las rows que obtienes del SELECT y generar la lista en base a la clase que definas

    [WinForms] Edición Empleados

    analzia la capa de datos que explico en el articulo

     Convert List Object to JSON in C#

    no uses NUNCA dataset para trabajar con json

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    lunes, 12 de marzo de 2018 16:11
  • La muleta del DataTable siempre termina siendo problemática.  Si se mueve a clases que implementen INotifyPropertyChanged y colecciones como BindingList sus problemas se resolverían fácilmente.

    Jose R. MCP
    Code Samples

    lunes, 12 de marzo de 2018 20:01
    Moderador
  • por ejemplo ???   soy nuevo en esto.
    martes, 13 de marzo de 2018 13:08
  • por ejemplo ???   soy nuevo en esto.

    martes, 13 de marzo de 2018 13:08
  • hola

    >>por ejemplo ???   soy nuevo en esto.

    pero conoces que es una clase ? analizaste el ejemplo del articulo que recomende

    alli utilizo el datareader en un while para crear una List<> en base a la clase que definas

    Classes (C# Programming Guide)

    cuando tengas la lista podras serializarla a json de forma correcta

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 13 de marzo de 2018 14:20
  • por ejemplo ???   soy nuevo en esto.

    Es muy sencillo:  Crea una clase donde agrega una propiedad para cada columna de su actual DataTable.  Entonces una instancia de esta clase representa una fila de su actual DataTable.  Entonces para completar la tabla, ocupa múltiples filas.  Eso sería una colección de esa clase.

    public class MiDato
    {
        public long Id { get; set; }
        public string Nombre { get; set; }
        public string AlgunOtroDato { get; set; }
        public DateTime FechaDeCreacion { get; set; }
    }

    Luego una lista de esa clase sería:

    List<MiDato> datos = new List<MiDato>();
    //Idealmente la lista se llena usando lo más eficiente, un SqlDataReader, pero por ahora le muestro el traspaso desde un DataTable.
    foreach (DataRow r in algunDt.Rows)
    {
        MiDato dato = new MiDato()
        {
            Id = (int)r[0],
            Nombre = r[1].ToString(),
            AlgunOtroDato = r[2].ToString(),
            FechaDeCreacion = (DateTime)r[3]
        };
        datos.Add(dato)
    }
    //Listo!  Puede usar "datos" para vincular a datos.
    dataGridView1.Columns.Clear();
    dataGridView1.AutoGenerateColumns = true;
    dataGridView1.DataSource = datos; //Automáticamente se crean columnas y filas!
    //Y ahora, si lo necesitara, podría serializar la colección a JSON y deserializarla si así lo necesitara.


    Jose R. MCP
    Code Samples

    martes, 13 de marzo de 2018 16:38
    Moderador