[英]Automapper map from inner property to destination class
似乎無法弄清楚這一點。
public class DestinationClass
{
public int InnerPropertyId { get; set; }
public string StrignValue { get; set; }
}
public class SourceClass
{
public InnerValue Inner { get; set; }
}
public class InnerValue
{
public int InnerPropertyId { get; set; }
public string StrignValue {get;set;}
}
我需要 map 從 SourceClass.InnerValue 直接到 DestinationClass。 我怎么做?
提前致謝。
像往常一樣,在我點擊帖子問題按鈕后:
Mapper.Reset();
// from, to
Mapper.CreateMap<InnerValue, DestinationClass>();
Mapper.CreateMap<SourceClass, DestinationClass>()
.ConvertUsing(s => Mapper.Map<InnerValue, DestinationClass>(s.Inner));
Mapper.AssertConfigurationIsValid();
var source = new SourceClass() { Inner = new InnerValue() { InnerPropertyId = 123, StringValue = "somethinges" } };
var dest = Mapper.Map<SourceClass, DestinationClass>(source);
我們確實遇到了ConvertUsing沒有給出完全填充結果的問題,因為我們的SourceClass版本有一個我們想要映射到DestinationClass的附加值
我們確實發現以下代碼給出了所需的結果:
{
...
Mapper.CreateMap<InnerValue, DestinationClass>(MemberList.Source);
Mapper.CreateMap<SourceClass, DestinationClass>(MemberList.Source)
.ConstructUsing(s => Mapper.Map<DestinationClass>(s.Inner))
.ForSourceMember(m => m.Inner, opt => opt.Ignore());
...
}
public class DestinationClass
{
public int InnerPropertyId { get; set; }
public string StringValue { get; set; }
public string SourceClassValue { get; set; }
}
public class SourceClass
{
public string SourceClassValue { get; set; }
public InnerValue Inner { get; set; }
}
public class InnerValue
{
public int InnerPropertyId { get; set; }
public string StrignValue {get;set;}
}
ConstructUsing在映射內部成員后繼續映射其余成員,而ConvertUsing不映射。
映射應如下所示:
CreateMap<SourceClass, DestinationClass>()
.ForMember(x => x.InnerPropertyId , x => x.MapFrom(z => z.Inner.InnerPropertyId))
.ForMember(x => x.StrignValue , x => x.MapFrom(z => z.Inner.StrignValue))
;
另一種方法可能是利用展平功能。
Mapper.CreateMap<SourceClass, DestinationClass>()
.IncludeMembers(s => s.Inner);
Automapper 然后將使用來自InnerValue
的成員,就像在 SourceClass 本身中一樣
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.