使用C# Record作为Response DTO返回空响应的问题排查
问题原因及解决办法
核心问题出在JSON序列化器的默认行为上:ASP.NET Core自带的System.Text.Json序列化器,默认只处理带get/set访问器的公共属性,完全忽略公共字段。
你定义的CustomerItsDetailDto Record用的是公共字段:
public record CustomerItsDetailDto { public string VirtualVisitStatus; public List<CustomerItsTaskDetailDto> TaskDetails; }
调试时能看到内容非空,是因为调试器直接读取字段值,但序列化器不会把这些字段转换成JSON,所以Postman拿到的就是空响应。
你改成Class后能正常工作,应该是在Class版本里把字段改成了标准属性(比如public string VirtualVisitStatus { get; set; })——属性才是.NET里用来暴露数据的常规方式,序列化器会正常处理。
不用改Class,这样改Record就行
把Record里的字段改成带访问器的公共属性:
public record CustomerItsDetailDto { public string VirtualVisitStatus { get; set; } public List<CustomerItsTaskDetailDto> TaskDetails { get; set; } }
如果非要用字段,也可以修改System.Text.Json的配置让它序列化字段,但这不符合.NET的编码惯例,不推荐这么做。
内容的提问来源于stack exchange,提问作者ferhat tumer
相关产品推荐
相关产品推荐

