簡體   English   中英

Automapper map 從內部屬性到目的地 class

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM