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

如何使用AutoMapper映射AWS Cognito自定义属性至UserDto

问题描述

我有一个AWS Cognito自定义属性 custom:events_permission,其JSON结构如下:

[
   {
      "id":"48d258b7-8949-41z4-815a-f141487a6de1",
      "name":"event name",
      "user_id":"4eef6471-9a79-40r1-qw95-f22974f492d6",
      "role":"exhibitor-admin",
      "exhibitor_account_id":"42e812fe-f7ac-48fe-8a15-a0cb80c3ab59",
      "permissions":[
         "exh-manual:['view','edit','add']",
         "exh-leads:['*']",
         "exh-usr:['*']"
      ]
   }
]

同时我定义了一个C# DTO类 UserDto:

public class UserDto
{
    public string ExhibitorId { get; set; }
    public string UserId { get; set; }
    public string Type { get; set; }
    public string TenantId { get; set; }
    public string Role { get; set; }
    public string Permissions { get; set; }
}

请问如何使用AutoMapper实现字段映射:将exhibitor_account_id映射到ExhibitorId、permissions映射到Permissions,以及其他对应字段?

解决方案

1. 定义源模型类

首先创建与Cognito属性结构匹配的强类型类,AutoMapper需要基于强类型进行映射:

public class EventPermission
{
    public string Id { get; set; }
    public string Name { get; set; }
    [JsonPropertyName("user_id")]
    public string UserId { get; set; }
    public string Role { get; set; }
    [JsonPropertyName("exhibitor_account_id")]
    public string ExhibitorAccountId { get; set; }
    public List<string> Permissions { get; set; }
}

注意:使用JsonPropertyName特性匹配JSON中的蛇形命名字段,确保反序列化正确。

2. 配置AutoMapper Profile

创建自定义Profile类,配置字段映射规则,重点处理permissions数组转字符串的逻辑:

public class EventPermissionProfile : Profile
{
    public EventPermissionProfile()
    {
        CreateMap<EventPermission, UserDto>()
            // 映射exhibitor_account_id到ExhibitorId
            .ForMember(dest => dest.ExhibitorId, opt => opt.MapFrom(src => src.ExhibitorAccountId))
            // 将permissions数组序列化为JSON字符串(也可按需用拼接等方式处理)
            .ForMember(dest => dest.Permissions, opt => opt.MapFrom(src => JsonSerializer.Serialize(src.Permissions)))
            // 名称匹配的字段直接映射
            .ForMember(dest => dest.UserId, opt => opt.MapFrom(src => src.UserId))
            .ForMember(dest => dest.Role, opt => opt.MapFrom(src => src.Role))
            // 无对应源的字段设置为忽略,保持默认值
            .ForMember(dest => dest.Type, opt => opt.Ignore())
            .ForMember(dest => dest.TenantId, opt => opt.Ignore());
    }
}

3. 初始化AutoMapper并执行映射

在应用启动时完成AutoMapper初始化,再执行映射操作:

// 初始化Mapper(通常放在Startup或Program.cs中)
var configuration = new MapperConfiguration(cfg =>
{
    cfg.AddProfile<EventPermissionProfile>();
});
var mapper = configuration.CreateMapper();

// 从Cognito获取属性值并反序列化
string cognitoPermissionJson = "你的Cognito属性JSON字符串";
var eventPermissions = JsonSerializer.Deserialize<List<EventPermission>>(cognitoPermissionJson);

// 取数组第一个元素映射为UserDto(根据业务场景处理多元素情况)
if (eventPermissions?.Any() == true)
{
    UserDto userDto = mapper.Map<UserDto>(eventPermissions.First());
    // 后续使用userDto
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 22:48:11