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

ASP.NET Core 6 Web API如何序列化与反序列化类的公共字段?

解决ASP.NET Core控制器返回公共字段类序列化空对象的问题

问题根因

ASP.NET Core默认使用的System.Text.Json序列化器,默认不会序列化公共字段,只处理带有getter的属性。单独添加[JsonInclude]无效,因为这个属性是用于让私有/受保护的成员被序列化,不改变公共字段的默认序列化规则。

解决办法

办法一:将公共字段改为属性(推荐,符合.NET编码规范)

修改RunningScenario类,把字段改成带getter/setter的属性:

public class RunningScenario
{
    public int Id { get; set; }
    public string Name { get; set; }
}

修改后无需额外配置,序列化器会自动处理属性,返回预期的{"Id": 1, "Name": "Scenario 1"}。

办法二:全局配置序列化器包含公共字段

如果不想修改类结构,可在Program.cs(.NET 6及以上版本)中全局配置序列化选项:

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

配置后所有类的公共字段都会被序列化,原RunningScenario类无需改动即可正常返回数据。

办法三:给单个字段添加[JsonPropertyName]属性

如果只想让特定公共字段被序列化,可给目标字段添加该属性:

public class RunningScenario
{
    [JsonPropertyName("Id")]
    public int Id;
    [JsonPropertyName("Name")]
    public string Name;
}

这个属性会明确告诉序列化器该字段需要被序列化,同时可自定义JSON中的键名(示例中与字段名一致,可直接使用)。

内容的提问来源于stack exchange,提问作者Pierre K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 18:15:14