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

.NET 6异步查询抛出System.NotSupportedException异常求助

解决异步方法抛出System.Action序列化异常的方案

排查ServiceResponse类定义

这个异常核心原因是ServiceResponse类中可能包含了无法被JSON序列化的异步状态成员(如Task、Action类型的属性/字段),或者类本身未配置正确的序列化规则。请检查该类代码:

  • 移除所有异步操作的中间状态成员(比如TaskCompletionSource、未完成的Task实例)
  • 确保所有成员都是可序列化类型(基本类型、DTO类、枚举等),删除Action、Func这类无法序列化的类型成员

验证EF Core版本与.NET 6兼容性

同时安装.NET 5和6 SDK时,项目可能误引用了.NET 5版本的EF Core包,导致异步方法行为异常:

  • 打开项目.csproj文件,确认所有Microsoft.EntityFrameworkCore相关包版本为6.x.x(与.NET 6匹配),示例配置:
    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.25" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.25" />
    
  • 若存在版本不匹配,将所有EF Core包更新至对应.NET 6的稳定版本

检查JSON序列化配置

如果是Web API项目,确认Program.cs中的JSON序列化配置未错误处理异步类型:

  • 避免将异步操作的返回值直接传入序列化逻辑,可显式配置忽略不可序列化成员:
    builder.Services.AddControllers()
        .AddJsonOptions(options =>
        {
            options.JsonSerializerOptions.IgnoreReadOnlyProperties = true;
            options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
            options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;
        });
    

临时排查:分离异步查询与DTO映射

尝试拆分异步查询和DTO映射步骤,排查是否是映射过程引入的问题:

public async Task<ServiceResponse<List<GetCharacterDto>>> GetAllCharacters()
{
    var response = new ServiceResponse<List<GetCharacterDto>>();
    // 单独执行异步查询,添加AsNoTracking减少上下文跟踪开销
    var dbCharacters = await _context.Characters.AsNoTracking().ToListAsync();
    // 单独处理DTO映射
    var characterDtos = dbCharacters.Select(c => _mapper.Map<GetCharacterDto>(c)).ToList();
    response.Data = characterDtos;

    return response;
}

确认项目目标框架

检查项目属性,确保目标框架设置为**.NET 6**,避免因SDK切换导致项目误绑定到.NET 5环境。


内容的提问来源于stack exchange,提问作者vpp090

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:30:57