.NET Core 5向前端返回指定字段精简类JSON的推荐解决方案
.NET Core 5 按需返回精简JSON的解决方案
以下是不同场景下的可选方案,按推荐优先级排序:
方案1:使用专用DTO(数据传输对象)【最推荐】
这是.NET生态的标准最佳实践,针对不同返回场景定义独立的轻量级传输类,从根源上避免冗余字段:
// 文件类资源返回DTO namespace Tasks.Dtos { public class FileResourceDto { public Guid Id { get; set; } public string Type { get; set; } public string Name { get; set; } } // URL类资源返回DTO public class UrlResourceDto { public Guid Id { get; set; } public string Url { get; set; } public string Name { get; set; } } }
业务逻辑中可以手动映射或者通过AutoMapper等工具将Resources实体转换为对应DTO返回,完全不会出现多余字段,同时支持类型校验,后续字段调整维护成本低。
方案2:配置序列化规则忽略null值【适合不想新增类的场景】
.NET Core 5默认使用System.Text.Json做JSON序列化,可以配置全局/局部忽略null值字段,未赋值的属性就不会出现在返回结果中:
全局配置(Startup.cs/Program.cs)
services.AddControllers() .AddJsonOptions(options => { // 序列化时忽略值为null的属性 options.JsonSerializerOptions.IgnoreNullValues = true; });
如果只需单接口生效,也可以在返回时自定义序列化配置:
var jsonOptions = new JsonSerializerOptions { IgnoreNullValues = true }; return Json(response, jsonOptions);
方案3:返回匿名对象【适合临时快速开发场景】
不需要额外定义类,直接在控制器返回时按需构造匿名对象即可:
// 文件类资源接口返回示例 public IActionResult GetFile(Guid resourceId) { var resource = _context.Resources.Find(resourceId); return Ok(new { resource.Id, resource.Type, resource.Name }); } // URL类资源接口返回示例 public IActionResult GetUrl(Guid resourceId) { var resource = _context.Resources.Find(resourceId); return Ok(new { resource.Id, resource.Url, resource.Name }); }
该方案无需新增类,但没有类型校验,复杂业务场景不推荐使用。
内容的提问来源于stack exchange,提问作者GerryMM88
相关产品推荐
相关产品推荐

