我已经开始在我的项目中使用tinymapper进行对象到对象的映射,并成功将单个对象映射到单个对象,但是当我想将整个实体对象列表映射到DTO类列表时,我陷入了困境。你能帮帮我吗?我用谷歌搜索,但没有找到任何解决方案。有人可以帮帮我吗?
我可以使用以下代码将单个对象映射到对象:
var sq = new SurveyQuestion
{
SurveyId = 61,
Question = "John",
QuestionDescription = "Doe",
Type = "DB",
Selector = "TB",
QuestionId = "QID1",
SubSelector = "TX"
}
TinyMapper.Bind<Survey, surveyDto>();
var result = TinyMapper.Map<surveyDto>(sq);
但是,当我想将整个调查实体列表映射到surveyDto实体时,我感到困惑:
List<Survey> survey = _surveyRepository.All().ToList();
TinyMapper.Bind<List<Survey>, List<SurveyDto>>();
List<SurveyDto> surveyDto = TinyMapper.Map<List<SurveyDto>>(survey);
我收到了这个错误:
无法隐式转换类型 'System.Collections.Generic.List&LT; SurveyDto&GT;'至 'SurveyDto'“
答案 0 :(得分:2)
您应该创建相同的映射,但是将其描述为对象到对象,您应该将其描述为list-to-list。因此,您的目标和源对象都将是一个列表,您将描述映射配置如何将源列表的每个元素映射到目标列表的每个元素。它非常简单
<强>更新强>
所以,它应该像那样:
TinyMapper.Bind<List<Survey>, List<SurveyDto>>(config =>
{
// Configure you config
});
另一件事是你可能应该编写自定义映射类。
还有一个很好的问题:TinyMapper是否支持集合绑定?如果不是你不能做到
答案 1 :(得分:0)
试试这个one
[Fact]
public void Test()
{
var fromDatabase = new List<Survey>
{
new Survey { Id = 1, Data = "Data1" },
new Survey { Id = 2, Data = "Data2" }
};
TinyMapper.Bind<List<Survey>, List<SurveyDto>>();
var dto = TinyMapper.Map<List<SurveyDto>>(fromDatabase);
}
public sealed class Survey
{
public int Id { get; set; }
public string Data { get; set; }
}
public sealed class SurveyDto
{
public int Id { get; set; }
public string Data { get; set; }
}