none
Error al deserializar cadena en Object Class RRS feed

  • Pregunta

  • Hola

    En mi servidor hago esto :

     [HttpGet]
            public string GetSeleccionarTodasFilasTabla(string NombreTabla, string Version)
            {
                string resultado = string.Empty;
                Engine.EngineDb FuncionDb = new Engine.EngineDb();          
                int permiso = FuncionDb.PermisoSync(Version);
                if (permiso < 1)
                {
                    return resultado = Engine.EngineData.SyncNoPermitida;
                }
                DataTable dt = new DataTable();
                dt = FuncionDb.SeleccionarTodasFilasTabla(NombreTabla);
                if (dt.Rows.Count != 0)
                {
                    resultado = JsonConvert.SerializeObject(dt, Formatting.Indented);
                }
                else
                {
                    resultado = Engine.EngineData.NoHayFilas;
                }
                return resultado;
            }

    Me devuelve una cadena como esta

    "[\r\n  {\r\n  \"IdAbono\": 1,\r\n    \"Nombre\": \"No abona\"\r\n  },
    \r\n  {\r\n    \"IdAbono\": 2,\r\n    \"Nombre\": \"Abono orgánico\"\r\n  },
    \r\n  {\r\n    \"IdAbono\": 3,\r\n    \"Nombre\": \"Fertilizante químico\"\r\n  },
    \r\n  {\r\n    \"IdAbono\": 4,\r\n    \"Nombre\": \"Combinación\"\r\n  }\r\n]"

    en mi aplicacion tengo esto :

    private void ClientGetTablaAbono(string RequestURI) { string resultado = string.Empty; HttpClient client = new HttpClient(); client.BaseAddress = new Uri("http://localhost:52143/"); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage response = new HttpResponseMessage(); response = client.GetAsync(RequestURI).Result; if (response.IsSuccessStatusCode) { resultado = response.Content.ReadAsStringAsync().Result; List<Abono> TAbono = new List<Abono>();

    //AQUI EL ERROR TAbono = JsonConvert.DeserializeObject<List<Abono>>(resultado); } else { resultado = response.IsSuccessStatusCode.ToString(); richTextBox1.Text = resultado; } }

    Mi Clase Abono es esta :

         public class Abono
            {
                public int IdAbono { get; set; }
    
                public string Nombre { get; set; }
            }

    ERROR

    Newtonsoft.Json.JsonSerializationException: 'Error converting value "[
      {
        "IdAbono": 1,
        "Nombre": "No abona"
      },
      {
        "IdAbono": 2,
        "Nombre": "Abono orgánico"
      },
      {
        "IdAbono": 3,
        "Nombre": "Fertilizante químico"
      },
      {
        "IdAbono": 4,
        "Nombre": "Combinación"
      }
    ]" to type 'System.Collections.Generic.List`1[ApiRestConsumer.Form2+Abono]'. Path '', line 1, position 308.'
    
    ArgumentException: Could not cast or convert from System.String to System.Collections.Generic.List`1[ApiRestConsumer.Form2+Abono].



    miércoles, 21 de noviembre de 2018 12:15

Respuestas

  •         [JsonObject]
            public class Abono
            {
                public int IdAbono { get; set; }
    
                public string Nombre { get; set; }
            }
    
            private void BtnGetTabla_Click(object sender, EventArgs e)
            {
                string RequestURI = "api/SeleccionCompletaSync?NombreTabla=Abono&Version=F8CEC9DB-15A8-4EAC-B19A-40E656ED643A";
                ClientGetTablaAbono(RequestURI);
            }
    
            private void ClientGetTablaAbono(string RequestURI)
            {
                string resultado = string.Empty;
                HttpClient client = new HttpClient();
                client.BaseAddress = new Uri("http://floranueva2-001-site1.gtempurl.com/");
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                HttpResponseMessage response = new HttpResponseMessage();
                response = client.GetAsync(RequestURI).Result;
                if (response.IsSuccessStatusCode)
                {
                    List<Abono> TAbono = new List<Abono>();
                    resultado = response.Content.ReadAsStringAsync().Result;
                    resultado = JsonConvert.DeserializeObject<string>(resultado);
                    TAbono = JsonConvert.DeserializeObject<List<Abono>>(resultado);
                }
                else
                {
                    resultado = response.IsSuccessStatusCode.ToString();
                    richTextBox1.Text = resultado;
                }
            }



    EFRAIN MEJIAS C VALENCIA - VENEZUELA



    jueves, 22 de noviembre de 2018 16:09

Todas las respuestas

  • Esos caracteres son retorno de carro y salto de línea. Cuando se pasa a String es como se genera. Son correctos. No debería de afectarte a la hora de serializar. 

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos


    miércoles, 21 de noviembre de 2018 12:19
    Moderador
  • De todas formas, la cadena que has puesto en la pregunta NO es un json válido.

    Debería ser 

     "{\r\n  \"Abono\": [\r\n    {\r\n      \"IdAbono\": 1,\r\n \"Nombre\": \"No abona\"\r\n    },\r\n   {\r\n      \"IdAbono\": 2,\r\n      \"Nombre\": \"Abono orgánico\"\r\n    }, \r\n    {\r\n      \"IdAbono\": 3,\r\n      \"Nombre\": \"Fertilizante químico\"\r\n    } ]}";

    Si lo pones en una variable y en un punto de ruptura te sitúas en dicha variable puedes ver el contenido en formato JSON

    

    Cuya visualización es 



    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    miércoles, 21 de noviembre de 2018 12:31
    Moderador
  • Hola ...Por ejemplo esta cadena

    r\n  {\r\n    \"IdProductor\": 8,\r\n    \"Identificador\": \"181efc20-f689-4239-9dc3-a29a66a1857e\",\r\n    \"Nombres\": \"Jon José\",\r\n    \"Apellido1\": \"Snow\",\r\n    \"Apellido2\": \"Stark\",\r\n    \"Foto\": \"user\",\r\n    \"CodigoFloraNueva\": \"4557589\",\r\n    \"NumeroCedula\": \"\",\r\n    \"IdPais\": null,\r\n    \"NombrePais\": null,\r\n    \"IdGrupo\": null,\r\n    \"NombreGrupo\": null,\r\n    \"IdDivisionAdministrativa1\": null,\r\n    \"NombreDivisionAdministrativa1\": null,\r\n    \"IdDivisionAdministrativa2\": null,\r\n    \"NombreDivisionAdministrativa2\": null,\r\n    \"IdDivisionAdministrativa3\": null,\r\n    \"NombreDivisionAdministrativa3\": null,\r\n    \"Estado\": \"ACTIVO\"\r\n  }\r\n]" to type 'System.Collections.Generic.List`1[FloraNueva.Models.ListaSeleccionVistaProductores]'. Path '', line 1, position 732.


    EFRAIN MEJIAS C VALENCIA - VENEZUELA


    miércoles, 21 de noviembre de 2018 15:28
  • Puedes formatear la respuesta? Me cuesta leerla. Gracias. Y cual es el problema que se te presenta?


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    miércoles, 21 de noviembre de 2018 15:47
    Moderador
  • Hola ...

    Sergio Parra

    Acabo de editar mi pregunta ..para hacerlo mas claro ...


    EFRAIN MEJIAS C VALENCIA - VENEZUELA

    jueves, 22 de noviembre de 2018 12:03
  • Hola. Ese mensaje de error lo obtienes cuando deserializas? Puedes mostrar la clase FloraNueva.Models.ListaSeleccionVistaProductores? Gracias

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    jueves, 22 de noviembre de 2018 12:43
    Moderador
  • Hola ...

    Sergio Parra...

    La pregunta en mi Post y su contenido la edite completamente a un caso mas concreto muco mas pequeño pero el mismo error  (ya que son varios) ..si le echas un ojo podras ver alli todo lo que nesecitas


    EFRAIN MEJIAS C VALENCIA - VENEZUELA

    jueves, 22 de noviembre de 2018 12:58
  • Hola, te recomiendo que copies en el portapapeles el Json. Luego generes las clases para su deserializacion con Edit/Paste Special/generate Json as Classes. Esto te genera las clases correctas para la serializacion. 

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    jueves, 22 de noviembre de 2018 13:40
    Moderador
  •         [JsonObject]
            public class Abono
            {
                public int IdAbono { get; set; }
    
                public string Nombre { get; set; }
            }
    
            private void BtnGetTabla_Click(object sender, EventArgs e)
            {
                string RequestURI = "api/SeleccionCompletaSync?NombreTabla=Abono&Version=F8CEC9DB-15A8-4EAC-B19A-40E656ED643A";
                ClientGetTablaAbono(RequestURI);
            }
    
            private void ClientGetTablaAbono(string RequestURI)
            {
                string resultado = string.Empty;
                HttpClient client = new HttpClient();
                client.BaseAddress = new Uri("http://floranueva2-001-site1.gtempurl.com/");
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                HttpResponseMessage response = new HttpResponseMessage();
                response = client.GetAsync(RequestURI).Result;
                if (response.IsSuccessStatusCode)
                {
                    List<Abono> TAbono = new List<Abono>();
                    resultado = response.Content.ReadAsStringAsync().Result;
                    resultado = JsonConvert.DeserializeObject<string>(resultado);
                    TAbono = JsonConvert.DeserializeObject<List<Abono>>(resultado);
                }
                else
                {
                    resultado = response.IsSuccessStatusCode.ToString();
                    richTextBox1.Text = resultado;
                }
            }



    EFRAIN MEJIAS C VALENCIA - VENEZUELA



    jueves, 22 de noviembre de 2018 16:09