我有一个 .Net 5 Web Api 项目并想使用
Mapster v7.2.0
以避免手动映射对象。以下代码显示了一个示例场景
- 设置映射配置
- 来自多个来源的地图
- 映射到不同名称的字段
.
[ApiController]
[Route("[controller]")]
public class MyController : ControllerBase
{
[HttpGet]
public ActionResult<UsernameWithTodoTitle> Get()
{
TypeAdapterConfig<(User, Todo), UsernameWithTodoTitle>
.NewConfig()
.Map(dest => dest, src => src.Item1) // map everything from user
.Map(dest => dest, src => src.Item2) // map everything from todo
.Map(dest => dest.TodoTitle, src => src.Item2.Title); // map the special fields from todo
var user = new User { Username = "foo", FieldFromUser = "x" };
var todo = new Todo { Title = "bar", FieldFromTodo = "y" };
var usernameWithTodoTitle = (user, todo).Adapt<(User, Todo), UsernameWithTodoTitle>();
return Ok(usernameWithTodoTitle);
}
}
public class User
{
public string Username { get; set; }
public string FieldFromUser { get; set; }
}
public class Todo
{
public string Title { get; set; } // !! map this one to the TodoTitle field !!
public string FieldFromTodo { get; set; }
}
public class UsernameWithTodoTitle
{
public string Username { get; set; }
public string TodoTitle { get; set; } // !! this one is special, is has a different name !!
public string FieldFromUser { get; set; }
public string FieldFromTodo { get; set; }
}
运行应用程序时,映射似乎以这种方式工作正常
我必须以这种方式设置配置,其他方式对我不起作用。但是还有3件事需要解决
- 配置对我来说看起来不对。它映射待办事项中的所有内容并再次映射特殊字段......所以它可能会循环多次?如果有多个名称不同的字段,这可能会很昂贵
- 我在控制器内部创建了配置。如何创建一个全局注册一次的可重用映射配置文件类?
- 当有一个映射配置文件时,这条线
var usernameWithTodoTitle = (user, todo).Adapt<(User, Todo), UsernameWithTodoTitle>();
对我来说看起来很乱。更好的是var usernameWithTodoTitle = UsernameWithTodoTitle.Adapt((user, todo)) /* pass in as a tuple */
因为它根据参数类型选择正确的映射配置文件
你们对如何创建这样的映射配置文件有任何想法吗?