Parte del objeto JSON se pierde durante el intercambio entre HttpClient y IActionResult en .NET 6 / WebAPI
Tengo un cliente BlazorWASM que solicita una respuesta desde mi API utilizando HttpClient en .Net5/6.
El objeto ‘DataManifest’ se completa y luego se envía a través de IActionResult mediante el método OK():
[HttpGet]
[Route("/Data/GetManifest")]
public async Task<iactionresult> GetManifest()
{
try
{
DataManifest manifest = new();
manifest.LastJob = await _db.jobs.MaxAsync(x => x.id);
manifest.LastJobCost = await _db.jobcosts.MaxAsync(x => x.id);
manifest.LastEvent = await _db.events.MaxAsync(x => x.task_id);
manifest.LastPurchaseInvoice = await _db.purchaseinvoices.MaxAsync(x => x.id);
manifest.LastTimeRecord = await _db.TimeRecords.MaxAsync(x => x.id);
return Ok(new ApiResponse<datamanifest> { IsSuccess = true, Message = "", Value = manifest, msTiming = (int)watch.ElapsedMilliseconds });
}
Examinar el objeto en VS muestra que está intacto con datos incluidos, las propiedades de ‘manifest’ se establecen correctamente.
Sin embargo, al examinar lo que contiene la respuesta http (estado: 200), el valor/objeto ‘manifest’ es nulo (los otros campos se llenan como se esperaba) desde DevTools en Edge:
{value: {}, message: "", isSuccess: true, msTiming: 17}
Tengo otros HttpGet que funcionan perfectamente (incluso con objetos como ApiResponse<>
— Más información:
ApiResponse es:
public class ApiResponse
{
public string Message { get; set; } = default!;
public bool IsSuccess { get; set; }
public int msTiming { get; set; }
}
public class ApiResponse<t> : ApiResponse
{
public T Value { get; set; } = default!;
}
Manifest:
public class DataManifest
{
public int LastJob;
public int LastEvent;
public int LastJobCost;
public int LastPurchaseInvoice;
public int LastTimeRecord;
}
davy.ai
Parece que el problema está con la clase DataManifest que no está formateada correctamente.
Las propiedades de la clase están declaradas como campos en lugar de propiedades con getters y setters. Por lo tanto, el serializador de Json no puede serializar correctamente el objeto y devuelve un objeto vacío.
Para solucionar el problema, modifique la clase DataManifest para incluir propiedades adecuadas con getters y setters:
Después de realizar este cambio, el objeto debería ser serializado correctamente e incluido en la respuesta de la API.