簡體   English   中英

Automapper 映射復雜的嵌套對象

[英]Automapper Mapping Complex nested Objects

我目前在嘗試映射數據對象時遇到錯誤,如下所示;

Method 'get_Item' in type 'Proxy_System.Collections.Generic.IList`1[[InsureAfrika_API.Model.DataModel, InsureAfrika API, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]_28141317_' from assembly 'AutoMapper.Proxies, Version=0.0.0.0, Culture=neutral, PublicKeyToken=be96cd2c38ef1005' does not have an implementation.

以下是我的數據來源; 報價來源Dto

public string ResponseStatus { get; set; }
public IList<Data> Data { get; set; }

數據類

public string Client { get; set; }
public IList<Extensions> Extensions { get; set; }

擴展源類

public Decimal Limit { get; set; }
public Decimal Rate { get; set; }

我的目的地班; 報價目的地模型

public string ResponseStatus { get; set; }
public IList<DataModel> Data { get; set; }

數據模型

public string Client { get; set; }
public IList<ExtensionsModel> Extensions { get; set; }

擴展模型類

public Decimal Limit { get; set; }
public Decimal Rate { get; set; }

以下是我的映射器配置;

var config = new MapperConfiguration(cfg => {
   cfg.CreateMap<IList<Extensions>, IList<ExtensionsModel>>();
   cfg.CreateMap<IList<Data>, IList<DataModel>>();

   cfg.CreateMap<QuoteSourceDto, QuoteDestinationModel>()
                    .ForMember(dest => dest.Data, opt => opt.MapFrom(src => src.Data))
                    .ForMember(dest => dest.ResponseStatus, opt => opt.Ignore());
})

我的數據源;

IList<Extensions> exts =new List<Extensions>
{
   new Extensions{Rate=1.34M,Limit=21400.00M};
}

IList<Data> dat = new List<Data>
{
  new Data{Client="Micael Angelus", Extensions =exts};
};

QuoteSourceDto dtos = new QuoteSourceDto
{
     ResponseStatus = "Success",
     Data = dat
};

因此我的 Map 函數調用如下所示;


var _client = mapper.Map<QuoteSourceDto, QuoteDestinationModel>(dtos);

當我使用List類型時,它不會返回任何錯誤,也不會返回任何結果,只是一個空列表,當我使用IList它會返回上述錯誤。 我想要做的就是將結果映射到 QuoteDestinationModel。

編輯我正在使用 Automapper 版本 9.0.0

AutoMapper 文檔說明:

“AutoMapper 只需要元素類型的配置,而不是可能使用的任何數組或列表類型。” ~文檔

這意味着您不必(也不應該)在特定類型的集合(使用泛型類型參數)之間創建映射配置文件,就像您所做的那樣:

// Don't do that!
cfg.CreateMap<IList<Extensions>, IList<ExtensionsModel>>();

相反,在具體類型之間創建映射配置文件:

var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<Extensions, ExtensionsModel>();
    cfg.CreateMap<Data, DataModel>();
    cfg.CreateMap<QuoteSourceDto, QuoteDestinationModel>()
        .ForMember(dest => dest.ResponseStatus, opt => opt.Ignore());
});

AutoMapper 將為您創建一個集合。 支持的源集合類型:

  • IEnumerable
  • IEnumerable<T>
  • ICollection
  • ICollection<T>
  • IList
  • IList<T>
  • List<T>
  • Array

請注意,我刪除了告訴 AutoMapper 如何在Data成員之間映射的配置部分。 由於 - 源和目標 - 模型具有相同的名稱,即Data ,AutoMapper 將很好地映射它們,而無需明確告訴它如何執行此操作。 也就是說,如果您之前在配置中創建了DataDataModel類型之間的映射。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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