亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用映射庫將嵌套對象映射到 C# 中的自定義對象

使用映射庫將嵌套對象映射到 C# 中的自定義對象

C#
狐的傳說 2021-06-25 18:19:43
我有以下對象結構:/// <summary>/// nested message instance provided by a business service/// </summary>public class Message{    public string Subject { get; set; }    public DateTime CreationDate { get; set; }    public List<Message> Messages { get; set; }}我想將該對象映射到以下對象結構:/// <summary>/// UI Object used to display a nested message structure/// </summary>public class MessageViewModel : ViewModelBase{    public bool IsSelected { get; set; }    public string Subject { get; set; }    public DateTime CreationDate { get; set; }    public List<MessageViewModel> Messages { get; set; }}有沒有可以輕松完成工作的映射器?
查看完整描述

2 回答

?
慕田峪7331174

TA貢獻1828條經驗 獲得超13個贊

我強烈推薦使用 Automapper,因為它非常簡單易用。在 Automapper 中,默認情況下會映射具有相同名稱的字段,并且需要最少的配置。您要實現的映射將按如下方式完成:


  var config = new MapperConfiguration(cfg =>

  {

      cfg.CreateMap<Message, MessageViewModel>();

  });

在集合的情況下,Automapper 可以映射以下內容,前提是已為其數據類型定義了配置:


IEnumerable

收藏

列表

列表

數組

由于在您的情況下已經為列表的數據類型提供了映射,因此不需要進一步配置。


如果您想映射具有不同名稱的字段,或者您想在此過程中進行一些基本級別的驗證,您可以使用以下語法來定義配置:


var config = new MapperConfiguration(cfg =>

{

    cfg.CreateMap<Message, MessageViewModel>()

    .ForMember(destination => destination.SomeDestinationField, map => map.MapFrom(source => source.SomeSourceFieldWithDifferentName))

    .ForMember(destination => destination.SomeDestinationField, map => map.MapFrom(source => source.SomeSourceField ?? SomeDefaultValue));

});

然后我們可以使用 MapperConfiguration 對象來初始化 Mapper 并執行我們的映射如下:


SourceClass SourceObject = new SourceClass();

// Populate SourceObject with values


var mapper = config.CreateMapper();

DesitnationClass DestinationObject = mapper.Map<DesitnationClass>(SourceObject);

我建議閱讀這些文檔


查看完整回答
反對 回復 2021-06-27
  • 2 回答
  • 0 關注
  • 169 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號