.NET中System.Type序列化失败求助:ListSelectCategories接口报错
接口序列化错误排查:System.NotSupportedException
错误信息:System.NotSupportedException: Serialization and deserialization of 'System.Type' instances are not supported. Path: $.HttpContext.Features.Key.
问题场景
测试ListSelectCategories接口时触发上述错误,该接口不接收客户端传入数据。应用与数据库交互正常,调试时业务方法返回的response变量数据正常,但控制器执行返回逻辑时触发序列化错误。
相关代码
控制器代码
[HttpGet("Select")] public async Task<IActionResult> ListSelectCategories() { var response = await _categoryApplication.ListSelectCategories(); return Ok(Response); // 错误行:返回了Controller的内置Response属性而非业务返回的response变量 }
业务方法代码
public async Task<BaseResponse<IEnumerable<CategorySelectResponseDto>>> ListSelectCategories() { var response = new BaseResponse<IEnumerable<CategorySelectResponseDto>>(); var categories = await _unitOfWork.Category.ListSelectCategories(); if (categories is not null) { response.IsSuccess = true; response.Data = _mapper.Map<IEnumerable<CategorySelectResponseDto>>(categories); response.Message = ReplyMessage.MESSAGE_QUERY; } else { response.IsSuccess = false; response.Message = ReplyMessage.MESSAGE_QUERY_EMPTY; } return response; }
DTO定义
namespace POS.Application.Dtos.Response { public class CategorySelectResponseDto { public int CategoryId { get; set; } public string? Name { get; set; } } }
解决方案
修正控制器的返回语句:将Ok(Response)修改为Ok(response)。
原因:大写的Response是Controller基类的内置属性,代表当前HTTP响应对象,包含HttpContext等无法被JSON序列化的类型;而小写的response才是业务方法返回的、符合序列化要求的自定义响应模型。
内容的提问来源于stack exchange,提问作者josmanuel
相关产品推荐
相关产品推荐

