.Net System.Text.Json无法序列化BaseResponse<NoContent>但Device可序列化问题
问题根本原因
System.Text.Json 默认配置下仅序列化公共属性(带有get/set访问器的类成员),不会序列化公共字段。你定义的BaseResponse<T>类中的Data、Status、Errors均为公共字段,这就是该类型无法正常序列化的核心原因。
而Device类可以正常序列化,是因为它的成员都采用了属性的方式定义,符合System.Text.Json的默认序列化规则。
可选解决方案
方案1:保留System.Text.Json,做适配调整
- 调整
BaseResponse<T>类的成员定义,把字段改为属性:
public class BaseResponse<T> where T : class, new() { public BaseResponse() { Data = new T(); } public T Data { get; set; } public string Status { get; set; } = "Success"; public List<string> Errors { get; set; } public BaseResponse<T> AddError(string message) { Errors ??= new List<string>(); Status = "Error"; Errors.Add(message); return this; } }
- 不想修改类定义的话,序列化时开启字段序列化支持即可:
var serializeOptions = new JsonSerializerOptions { IncludeFields = true }; var json1 = JsonSerializer.Serialize(data, serializeOptions);
方案2:使用Newtonsoft.Json
你当前选择的方案也完全可行,Newtonsoft.Json默认支持公共字段的序列化,无需额外调整即可兼容你现有的类定义。
内容的提问来源于stack exchange,提问作者ikbalkazanc
相关产品推荐
相关产品推荐

