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

.NET 8 Web API返回List<User>为空对象列表的问题排查

.NET 8 Web API返回List为空对象列表的问题解决

问题现象

在.NET 8 Web API中使用IActionResult返回数据时:

  • 返回匿名对象列表能正常输出完整数据:

    public IActionResult GetData()
    {
      var erg1 = _database.table.Select(x => new { x.Id, x.firstname, x.lastname });
      return Ok(erg1);
    }
    

    返回结果:

    [
      {
        "id": "732fdbd7-c878-45e8-8c43-5f795a697f6d",
        "firstname": "Uwe",
        "lastname": "Gabbert"
      },
      {
        "id": "5288f9ea-25a2-4ffc-a711-7c0b2cf49c38",
        "firstname": "User",
        "lastname": "Test"
      }
    ]
    
  • 但返回自定义User类的List<User>时,内存中对象数据正常,但接口返回空对象列表:

    public IActionResult GetData()
    {
        var erg2 = _database.table.Select(x => new User( x.Id, x.firstname, x.lastname ));
        return Ok(erg2);
    }
    

    返回结果:

    [
      {},
      {}
    ]
    

User类定义:

public class User
{
    public string Id = "";
    public string Firstname = "";
    public string Lastname = "";

    public User(string id, string firstname, string lastname)
    {
        Id = id;
        Firstname = firstname;
        Lastname = lastname;
    }
}

问题原因

.NET默认使用的System.Text.Json序列化器,默认只序列化类的属性(Properties),不序列化公共字段(Fields)。User类中定义的Id、Firstname、Lastname都是公共字段而非属性,因此序列化时这些字段会被忽略,最终返回空对象。

解决方案

方案1:将字段改为属性(推荐)

遵循.NET编码规范,把公共字段替换为只读属性(适合不需要修改的场景):

public class User
{
    public string Id { get; } = "";
    public string Firstname { get; } = "";
    public string Lastname { get; } = "";

    public User(string id, string firstname, string lastname)
    {
        Id = id;
        Firstname = firstname;
        Lastname = lastname;
    }
}

如果需要后续修改属性值,可以将get;改为get; set;。

方案2:配置序列化器包含公共字段

如果不想修改类结构,可以在Program.cs中配置Json序列化选项,让序列化器处理公共字段:

builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.IncludeFields = true;
    });

验证效果

修改完成后,重新调用接口,即可正常返回包含User对象数据的JSON列表。

内容的提问来源于stack exchange,提问作者Uwe Gabbert

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 05:03:33