¿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);
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:
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:
Con estos cambios, la respuesta ahora se serializará correctamente en el objeto ServiceResponse y devolverá los valores esperados.