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开启字段序列化支持:
- 保持原始User类(字段版本):
public class User { public int Id; public string Name; public string Username; public string Email; }
- 序列化时传入配置好的选项:
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
相关产品推荐
相关产品推荐

