.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
相关产品推荐
相关产品推荐

