es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué OkObjectResult OK() agrega un “$id”: “1” a la respuesta?

Tenemos un punto final asp.net-core5 que devuelve un objeto.

    public class ServiceResponse
    {
        public Balance Balance { get; set; }
        public int Code { get; set; }
        public object Message { get; set; }
    }
    public class Balance
    {
        public float Amount { get; set; }
        public string Currency { get; set; }
    }

Pero por alguna razón, la respuesta que recibimos es:

{
    "$id": "1",
    "balance": {
        "$id": "2",
        "amount": 2130.804,
        "currency": "USD"
    },
    "code": 0,
    "message": null
}

Se observa que la respuesta agrega “$id”: “1” y cambia las propiedades a minúsculas.

El método es un async Task<iactionresult>.

public async Task<iactionresult> GetBalance([FromBody] cl_Balance value)

Y devolvemos:
return Ok(ServiceResponse);

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para solucionar este problema, debemos asegurarnos de que el objeto devuelto por el punto final coincida con la estructura de la clase ServiceResponse.

    Primero, necesitamos eliminar la propiedad $id y asegurarnos de que los nombres de las propiedades coincidan con los de la clase ServiceResponse. Para lograr esto, podemos utilizar un serializador como Newtonsoft.Json para deserializar la respuesta en la clase ServiceResponse. Aquí tienes un ejemplo de cómo hacerlo:

    using Newtonsoft.Json;
    
    ...
    
    var responseContent = await response.Content.ReadAsStringAsync();
    var serviceResponse = JsonConvert.DeserializeObject<serviceresponse>(responseContent);
    
    return Ok(serviceResponse);
    

    Segundo, necesitamos modificar la clase Balance para que los nombres de las propiedades coincidan con los de la respuesta. Para hacer esto, podemos utilizar anotaciones de atributos en las propiedades para mapearlas a la propiedad JSON correcta:

    public class Balance
    {
        [JsonProperty("amount")]
        public float Amount { get; set; }
    
        [JsonProperty("currency")]
        public string Currency { get; set; }
    }
    

    Con estos cambios, la respuesta ahora se serializará correctamente en el objeto ServiceResponse y devolverá los valores esperados.

Comments are closed.