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

System.Net.Http.Json序列化反序列化为何不识别字段,仅支持带get/set的属性?

System.Net.Http.Json序列化字段输出空JSON的原因及解决办法

问题根源

System.Net.Http.Json底层依赖的System.Text.Json序列化器,默认仅处理类的公共属性(带有getter和setter的成员),不会序列化公共字段,这就是使用字段时输出空{}的核心原因。

解决办法

方法1:将字段改为公共属性

这是最符合.NET序列化规范的方案,也是验证有效的方式:

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Username { get; set; }
    public string Email { get; set; }
}

使用这个类序列化时,会正常输出包含所有属性的JSON:

{"Id":12,"Name":"user","Username":"username","Email":"user@email.com"}

方法2:配置序列化选项以包含字段

如果必须保留字段,可以通过JsonSerializerOptions开启字段序列化支持:

  1. 保持原始User类(字段版本):
public class User
{
    public int Id;
    public string Name;
    public string Username;
    public string Email;
}
  1. 序列化时传入配置好的选项:
var user = new User()
{
    Id = 12,
    Name = "user",
    Username = "username",
    Email = "user@email.com"
};

var options = new JsonSerializerOptions
{
    IncludeFields = true // 开启字段序列化
};
var jsonString = JsonSerializer.Serialize(user, options);
Console.WriteLine(jsonString);

执行后会输出正确的JSON内容。

反序列化的注意事项

反序列化时如果目标类用的是字段,同样需要配置IncludeFields = true,否则无法将JSON数据映射到字段中。

内容的提问来源于stack exchange,提问作者Jai dewani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 15:27:50