簡體   English   中英

Automapper 執行沒有錯誤,但沒有數據從源復制到目標

[英]Automapper executes without error, but no data being copied from source to destination

我有一個像這樣的 class

public class ListOfBMTTeamMapping
{
    public class TeamMapping
    {
        public List<TeamMappings> results { get; set; }
    }
    public class TeamMappings
    {
        public int id { get; set; }
        public string areaPath { get; set; }
        public string agileReleaseTrainName { get; set; }
        public string deliveryTeamName { get; set; }
        public string keyedInTeamCode { get; set; }
        public string deliveryTeamId { get; set; }
        public bool isDeleted { get; set; }
        public string modified { get; set; }
        public string modifiedBy { get; set; }


    }
}

這是我的 model class 我需要將上述 API ZA2F2ED4F8EBC2CBB4C21A29DC40AB6 復制到其中

public class JsonBmtAdoMapping
{
    public int? Id { get; set; }
    public string AreaPath { get; set; }
    public string AgileReleaseTrainName { get; set; }
    public string DeliveryTeamName { get; set; }
    public string KeyedInTeamCode { get; set; }
    public string DeliveryTeamId { get; set; }
    public string IsDeleted { get; set; }
    public DateTime? Modified { get; set; }
    public string ModifiedBy { get; set; }
}

所以這是我嘗試過的代碼

var format = "dd/MM/yyyy"; 
var dateTimeConverter = new IsoDateTimeConverter { DateTimeFormat = format };
ListOfBMTTeamMapping.TeamMapping Results = new ListOfBMTTeamMapping.TeamMapping();
Results = JsonConvert.DeserializeObject<ListOfBMTTeamMapping.TeamMapping>(responseBody);

List<JsonBmtAdoMapping> jM = new List<JsonBmtAdoMapping>();
jM = _mapper.Map<ListOfBMTTeamMapping.TeamMapping,List<JsonBmtAdoMapping>>(Results);
int n = 10;

這是我的自動映射器配置文件

        CreateMap<ListOfBMTTeamMapping.TeamMapping, List<JsonBmtAdoMapping>>();
        
        CreateMap<ListOfBMTTeamMapping.TeamMappings, JsonBmtAdoMapping>();

但是當代碼執行時,我當然可以毫無問題地獲取結果變量中的數據

但是當映射器代碼觸發時,它執行該行而沒有任何錯誤,但是沒有數據從源復制到我的 model class 這是目標

當 Results 包含 124 行數據時,jM.count 始終為 0

我做錯了什么

AutoMapper 無法立即完成從TeamMappingList<JsonBmtAdoMapping>的映射,因為您的源是 object,其屬性包含列表,而目標本身就是一個列表。

所以你必須告訴他,這個從單個 object 到列表的轉換是如何完成的。 由於您已經為每個單獨的項目建立了映射,我們可以在映射方法中遞歸地使用它。

通過使用此映射,它應該可以工作:

CreateMap<ListOfBMTTeamMapping.TeamMappings, JsonBmtAdoMapping>();
CreateMap<ListOfBMTTeamMapping.TeamMapping, List<JsonBmtAdoMapping>>()
    .ConvertUsing((src, _, context) => src.results.Select(context.Mapper.Map<JsonBmtAdoMapping>).ToList());

更新

因為已經為各個項目定義了映射器,並且列表由 AutoMapper 自動處理,我們甚至可以使其更短(感謝 Lucian 在評論中的提示):

CreateMap<ListOfBMTTeamMapping.TeamMappings, JsonBmtAdoMapping>();
CreateMap<ListOfBMTTeamMapping.TeamMapping, List<JsonBmtAdoMapping>>()
    .ConvertUsing((src, _, context) => context.Mapper.Map<List<JsonBmtAdoMapping>>(src.results));

暫無
暫無

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

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