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.

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<>>). ¡No puedo entender por qué mi objeto DataManifest está causando un problema!

— 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;
}

Tags:  , , , ,

Answer

  1. Avatar for 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:

    public class DataManifest
    {
        public int LastJob { get; set; }
        public int LastEvent { get; set; }
        public int LastJobCost { get; set; }
        public int LastPurchaseInvoice { get; set; }
        public int LastTimeRecord { get; set; }
    }
    

    Después de realizar este cambio, el objeto debería ser serializado correctamente e incluido en la respuesta de la API.

Comments are closed.