none
Error al Convertir a Clase RRS feed

  • Pregunta

  • hola

    Estoy construyendo una Web Api en c# Donde en una de las operaciones devuelvo un string que serializo desde un DataTable

    de esta forma

     public string  GetCliente(string id)
            {
                DataTable dt = new DataTable();
                if (dt != null)
                {
                    dt = Engine.FuncionesDb.TableData(id);
                    string jsonCliente = JsonConvert.SerializeObject(dt);
                    return jsonCliente;
    
                } else
                {
                    return NotFound();
                }
            }


    Cuando hago la peticion desde mi App cliente obtengo la cadena perfectamente ...Pero al tratar de deserializar la cadena a la clase Cliente ...de esta forma...me devuelve el siguiente error :

    Newtonsoft.Json.JsonSerializationException: 'Error converting value

    "[{"Numero":2,"Id":"edeadb0d8cb8-4be1-8d98-883a007f9a10",

    "Nombre":"gdfgdf","Edad":22,"Telefono":"453345345","Saldo":64565.878,

    "FechaCreacion":"2018-08-06T18:26:26.73","FechaCreacionUtc":"2018-08-06T22:26:26.73",

    "FechaModificacion":"2018-08-06T18:26:26.73","FechaModificacionUtc":"2018-08-06T22:26:26.73",

    "Proceso":0,"Usuario":"EfrainMejiasC"}]"

    to type 'ApiRestConsumer.Form1+Cliente'. Path '', line 1, position 385.'

      private Cliente ClientGetRequest(string RequestURI)
            {
                Cliente jsonCliente = new Cliente();
                HttpClient client = new HttpClient();
                client.BaseAddress = new Uri("http://localhost:50445/");
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                HttpResponseMessage response = client.GetAsync(RequestURI).Result;
                if (response.IsSuccessStatusCode)
                {
                    string resultado = response.Content.ReadAsStringAsync().Result;
                    jsonCliente = JsonConvert.DeserializeObject<Cliente>(resultado);//AQUI el ERROR
                }
                else
                {
                    string resultado = response.Content.ReadAsStringAsync().Result;
                    jsonCliente = JsonConvert.DeserializeObject<Cliente>(resultado);
    
    
                }
    
                return jsonCliente;
            }

    mi clase Cliente

     public class Cliente
            {
                public int Numero { get; set; }
    
                public string Id { get; set; }
    
                public string Nombre { get; set; }
    
                public int Edad { get; set; }
    
                public string Telefono { get; set; }
    
                public double Saldo { get; set; }
    
                public DateTime FechaCreacion { get; set; }
    
                public DateTime FechaCreacionUtc { get; set; }
    
                public DateTime FechaModificacion { get; set; }
    
                public DateTime FechaModificacionUtc { get; set; }
    
                public int Proceso { get; set; }
    
                public string Usuario { get; set; }
    
            }


    EFRAIN MEJIAS C VALENCIA - VENEZUELA


    martes, 7 de agosto de 2018 0:09

Respuestas

  • Deleted
    martes, 7 de agosto de 2018 1:25
  • hola

    >>devuelvo un string que serializo desde un DataTable

    Pero estas mezclando peras con bananas, un datatable no es una clase cliente, se supome que serializas y deserializas la misma estructura

    Deberias obtener una lista de clientes con la consulta a la db y no un datatable, eso es lo que tienes que serializar y devolver, para luego poer deserializar

    Por otro lado si analizas el json veras  [], por lo que es un array de items, la deserializacion tambien debe ser una lista

     JsonConvert.DeserializeObject<List<Cliente>>()

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 7 de agosto de 2018 1:40

Todas las respuestas

  • Deleted
    martes, 7 de agosto de 2018 1:25
  • hola

    lo primero que noto es que si haces esto

    DataTable dt = new DataTable();

    NUNCA vas a obtener un null en la variable dt, por lo que este if

     if (dt != null)

    no tiene ningun sentido

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 7 de agosto de 2018 1:35
  • hola

    >>devuelvo un string que serializo desde un DataTable

    Pero estas mezclando peras con bananas, un datatable no es una clase cliente, se supome que serializas y deserializas la misma estructura

    Deberias obtener una lista de clientes con la consulta a la db y no un datatable, eso es lo que tienes que serializar y devolver, para luego poer deserializar

    Por otro lado si analizas el json veras  [], por lo que es un array de items, la deserializacion tambien debe ser una lista

     JsonConvert.DeserializeObject<List<Cliente>>()

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 7 de agosto de 2018 1:40