You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor WASM中API返回通用ResultList的List<object>转指定类型报错问题

Blazor WASM 通用返回对象反序列化问题修复方案

问题根因

反序列化后属性全为null的核心原因是Blazor默认使用的System.Text.Json序列化器默认区分属性名大小写:接口返回的JSON字段为小驼峰命名(如id、nomeEmpresa),而Empresa实体类的属性通常为大驼峰命名(如Id、NomeEmpresa),命名不匹配导致序列化器无法完成属性赋值。
同时当前使用List<object>存储业务数据再二次序列化/反序列化的设计存在不必要的性能损耗,可通过泛型优化解决。

解决方案

方案1:快速修复当前反序列化逻辑

给反序列化方法添加不区分大小写的配置即可直接解决属性为null的问题:

public async Task GetEmpresas()
{
    ResultList Resultado = await _dataAccess.GetEmpresas();
    if (await RetornoOk(Resultado))
    {
        string x = JsonSerializer.Serialize(Resultado.Resultados);
        List<Empresa> y = JsonSerializer.Deserialize<List<Empresa>>(x, new JsonSerializerOptions
        {
            // 关闭属性名大小写校验
            PropertyNameCaseInsensitive = true
        }); 
    }
}

如果存在属性名和JSON键差异较大的场景,也可在Empresa类的属性上添加JsonPropertyName特性显式指定映射关系:

public class Empresa
{
    [JsonPropertyName("id")]
    public int Id { get; set; }
    [JsonPropertyName("nomeEmpresa")]
    public string NomeEmpresa { get; set; }
    // 其余属性按上述规则配置即可
}

方案2:泛型优化(推荐)

将通用返回类ResultList改造为泛型类,避免二次序列化/反序列化的性能损耗,直接一步完成类型映射:

第一步:改造ResultList为泛型类

public class ResultList<T>
{
    public ResultList(List<T> resultados, string codigoErro = null, string mensagemErro = null)
    {
        this.Resultados = resultados;
        this.CodigoErro = codigoErro;
        this.MensagemErro = mensagemErro;
    }

    public string MensagemErro { get; set; }
    public List<T> Resultados { get; set; }
    public string CodigoErro { get; set; }
}

第二步:改造请求方法直接反序列化为指定类型

public async Task<ResultList<Empresa>> GetEmpresas()
{
    try
    {
        ResultList<Empresa> Result = await _httpClient.GetFromJsonAsync<ResultList<Empresa>>(
            "api/EmpCadBasico/GetEmpresas", 
            new JsonSerializerOptions
            {
                PropertyNameCaseInsensitive = true
            });
        return Result;
    }
    catch (Exception ex)
    {
        return new ResultList<Empresa>(null, null, ex.Message);
    }
}

改造后调用时可直接拿到List<Empresa>类型的结果,无需额外转换操作。


内容的提问来源于stack exchange,提问作者Nathan Gallete

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 02:18:01