我想從源的子對象映射到目標(作爲父對象)。Automapper - 如何從源子對象映射到目標
源模型:
public class SourceBaseResponse<T> where T : new()
{
public string Type { get; set; }
public string Id { get; set; }
public T Attributes { get; set; }
}
對於我的例子中我使用T-爲類型SourceAssignment的
public class SourceAssignment
{
public string Id { get; set; }
public string Email { get; set; }
public string EmployeeId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTimeOffset CreatedAt { get; set; }
}
目標對象
public class DestinationAssignment
{
public string Id { get; set; }
public string Email { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
我想源模型直接映射到目的地。所以,我試圖用
CreateMap<SourceAssignment, DestinationAssignment>();
CreateMap<SourceBaseResponse<SourceAssignment>, DestinationAssignment>()
.ForMember(dest => dest, opt => opt.MapFrom(src => AutoMapperConfig.Mapper.Map<DestinationAssignment>(src.Attributes)));
,因爲我在上面行獲得運行時錯誤這不是工作「爲成員自定義配置僅支持一個類型的頂級個人會員。」
所以,每this thread我嘗試以下
CreateMap<SourceBaseResponse<SourceAssignment>, DestinationAssignment>()
.AfterMap((src, dst) => Mapper.Map(src.Attributes, dst));
現在,我得到錯誤的映射應該發生它說「映射器未初始化。調用適當的配置初始化。如果你試圖使用映射器通過容器或其他方式實例,請確保您沒有任何對靜態Mapper.Map方法的調用,並且如果您使用的是ProjectTo或UseAsDataSource擴展方法,請確保您傳入相應的IConfigurationProvider實例。
我能夠使用ForMember每個屬性和src.Attributes它映射到dest(對於如:src.Attribute.Id到dest.Id)。這是有效的,但我真的不想這樣做,因爲我的Source是涉及嵌套子元素的複雜類(因爲這是一個Web API響應,我無法控制這個)。所以很多定製映射在這裏完成
CreateMap<SourceAssignment, DestinationAssignment>();
關於如何繼續的任何建議。
的'AfterMap'表達式使用靜態'Mapper',所以要確定它已配置(即靜態映射器具有SourceAssignment的映射 - > DestinationAssignment)。也許你正在配置一個實例,而不是靜態映射器? –
@GeorgPatscheider它是一個靜態映射器。如果沒有從SourceBaseResponse進行映射,我可以將它用於自動映射源到目標。 – sam113