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

.NET 6中AutoMapper注册替换this.GetType()遇对象循环引用错误

问题解决:.NET6中AutoMapper注册与Json循环引用错误

一、修复AutoMapper注册问题

在.NET6的Program.cs里,Main是静态方法,无法使用this.GetType(),你需要替换为当前程序集的类型引用,两种可行方式:

// 方式1:通过Program类获取程序集
builder.Services.AddAutoMapper(typeof(Program).Assembly);

// 方式2:直接指定映射配置类的程序集(更精准)
builder.Services.AddAutoMapper(typeof(HotelsMappingProfile).Assembly);

以上两种写法都能让AutoMapper扫描到你定义的HotelsMappingProfile配置类。

二、解决Json循环引用错误

你碰到的JsonException: A possible object cycle was detected错误,主要由两个问题导致,对应修复方案如下:

  1. 控制器返回类型不匹配
    在Get(int id)方法中,返回类型声明为ActionResult<Hotels>,但实际返回的是HotelsDto,这会引发序列化时的意外循环引用。
    修复:把返回类型改为ActionResult<HotelsDto>:
    [HttpGet("{id}")]
    public ActionResult<HotelsDto> Get([FromRoute] int id)
    {
        var hotels = _dbcontext
            .Hotels
            .Include(r => r.Address)
            .Include(r => r.Rooms)
            .FirstOrDefault(h => h.Id == id);
    
        if (hotels == null)
        {
            return NotFound();
        }
    
        var hotelsDtos = _mapper.Map<HotelsDto>(hotels);
    
        return Ok(hotelsDtos);
    }
    
  2. DTO间存在循环引用
    如果RoomsDto包含HotelsDto引用,同时HotelsDto包含List<RoomsDto>,序列化时会产生循环。
    可选修复方案:
    • 方案1:移除DTO中不必要的反向引用,比如RoomsDto里不需要保留关联的Hotel字段;
    • 方案2:配置Json序列化忽略循环引用,在Program.cs中添加:
      builder.Services.AddControllers()
          .AddJsonOptions(options =>
          {
              options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles;
          });
      

完整修复后的Program.cs核心片段

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles;
    });
builder.Services.AddDbContext<HotelsDbContext>();
builder.Services.AddScoped<HotelsSeeder>();
// 替换原有的AutoMapper注册代码
builder.Services.AddAutoMapper(typeof(Program).Assembly);

// 后续管道配置代码不变...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 13:25:32