You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 20:55:13