跳過到頁腳內容
.NET幫助

Automapper C#(開發者的工作原理)

Automapper是一個多元且強大的C#程式庫,旨在促進物件到物件的映射,使得在複雜的物件模型之間傳輸資料更加簡單且易於維護。 在本文中,我們將探討Automapper如何有效地映射屬性、平坦化複雜的物件模型,以及如何處理各類物件,如使用者領域物件和資料傳輸物件。

Automapper介紹

C#中的Automapper是物件對物件的映射器,一種簡化在不同物件類型之間轉換和傳輸資料的工具。這在涉及資料實體及其轉換為資料傳輸物件(DTO)時特別有用。

Automapper的關鍵功能

  • 簡化程式碼: Automapper透過自動化屬性映射大大減少了手動編寫程式碼的需求,從而防止錯誤並節省時間。
  • 映射配置的靈活性: Automapper允許詳細自訂映射配置,以適應各種映射場景。
  • 性能效率: 程式庫設計來處理大型且複雜的物件模型,而不對性能造成顯著的負擔。

開始使用Automapper

要使用Automapper,必須首先通過封裝管理員控制台安裝它,這是開發環境的一個組件,用來促進軟體包管理。

透過封裝管理員控制台進行安裝

您可以通過在封裝管理員控制台中執行簡單命令,輕鬆地在專案中安裝Automapper:

Install-Package AutoMapper

設置基本映射配置

使用Automapper的基本步驟是定義映射配置。 這涉及指定如何將輸入物件(來源)的屬性轉移到輸出物件(目的地)。

var config = new MapperConfiguration(cfg => 
{
    cfg.CreateMap<SourceClass, DestinationClass>();
});
IMapper mapper = config.CreateMapper();
var config = new MapperConfiguration(cfg => 
{
    cfg.CreateMap<SourceClass, DestinationClass>();
});
IMapper mapper = config.CreateMapper();
$vbLabelText   $csharpLabel
  • 在上述範例中,建立一個映射配置以將屬性從DestinationClass
  • 然後使用該配置建立IMapper的實例。

Automapper進階映射技術

Automapper的功能遠不止簡單的屬性到屬性映射。 它可以熟練地處理更複雜的情境。

平坦化複雜的物件模型

Automapper的一項優勢是能夠平坦化複雜的物件模型。 這個功能在處理巢狀物件時特別有用,允許將這些巢狀屬性映射到扁平的目的地類結構。

多元物件類型處理

Automapper可以熟練地在各種物件類型之間進行映射,包括使用者領域物件、DTOs,甚至是視圖模型,為不同的資料傳輸需求提供多元化的解決方案。

實用使用範例

為了更好理解Automapper的實用性,我們來看看一些實際範例。

範例1:簡單映射

考慮一種情境,我們需要從使用者實體映射屬性到使用者DTO:

public class User
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
}

public class UserDTO
{
    public string FullName { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
}

// Mapping Configuration
var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<User, UserDTO>()
       .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.FirstName + " " + src.LastName));
});
IMapper mapper = config.CreateMapper();
User user = new User { FirstName = "John", LastName = "Doe", Address = "123 Street", City = "CityName" };
UserDTO userDto = mapper.Map<UserDTO>(user);
public class User
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
}

public class UserDTO
{
    public string FullName { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
}

// Mapping Configuration
var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<User, UserDTO>()
       .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.FirstName + " " + src.LastName));
});
IMapper mapper = config.CreateMapper();
User user = new User { FirstName = "John", LastName = "Doe", Address = "123 Street", City = "CityName" };
UserDTO userDto = mapper.Map<UserDTO>(user);
$vbLabelText   $csharpLabel
  • 這個範例展示了LastName的連接。

範例2:使用複雜物件的進階映射

在一個更複雜的情境中,讓我們將含有巢狀使用者詳細資料的訂單物件映射到一個簡化的訂單DTO:

public class Order
{
    public User OrderedBy { get; set; }
    // Other properties...
}

public class OrderDTO
{
    public string FullName { get; set; }
    // Other properties...
}

// Mapping Configuration
var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<Order, OrderDTO>()
       .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.OrderedBy.FirstName + " " + src.OrderedBy.LastName));
});
IMapper mapper = config.CreateMapper();
Order order = new Order { OrderedBy = new User { FirstName = "Jane", LastName = "Doe" } };
OrderDTO orderDto = mapper.Map<OrderDTO>(order);
public class Order
{
    public User OrderedBy { get; set; }
    // Other properties...
}

public class OrderDTO
{
    public string FullName { get; set; }
    // Other properties...
}

// Mapping Configuration
var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<Order, OrderDTO>()
       .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.OrderedBy.FirstName + " " + src.OrderedBy.LastName));
});
IMapper mapper = config.CreateMapper();
Order order = new Order { OrderedBy = new User { FirstName = "Jane", LastName = "Doe" } };
OrderDTO orderDto = mapper.Map<OrderDTO>(order);
$vbLabelText   $csharpLabel
  • 這個範例展示了從包含巢狀FullName屬性。

在版本9.0中,AutoMapper已從靜態API(Mapper.Initialize)轉變為基於實例的API。 此變更增強了靈活性,更適合現代應用程式,尤其是那些使用依賴注入的應用程式。 如果您正在使用早於9.0的版本,則可以適用靜態API方法。 但是,對於較新版本,建議採用如上範例所述的基於實例的API。

Iron Software Suite概覽

Iron Software Suite for .NET是一個功能強大的封裝,包含一系列各自服務於特定目的的程式庫。 它涵蓋了創建、閱讀和編輯PDF、將HTML轉換為PDF、以及將圖片轉換成多語言的文字等功能。 此套件滿足各種開發需求,是任何C#專案的多用途增強。

Iron Software Suite的關鍵組成部分

  1. IronPDF for PDF Management:此組件允許開發者創建、閱讀、編輯和簽署PDF。 它還提供將HTML轉換為 PDF 的功能,這在從基於網頁的資料生成報告或文件時特別有用。

    Automapper C# (How it Works For Developers): 圖1 - IronPDF for .NET: The C# PDF Library

  2. IronXL Excel File Handling:IronXL可在不需要Office Interop的情況下處理Excel文件,簡化資料操作和分析任務。

    Automapper C# (How it Works For Developers): 圖2 - IronXL for .NET: The C# Excel Library

  3. IronOCR for Text Extraction:它支持從圖像中提取文本,支持多達125種語言,使其成為國際項目的多用途工具。

    Automapper C# (How it Works For Developers): 圖3 - IronOCR for .NET: The C# OCR Library

  4. IronBarcode for QR and Barcode Support:一個允許讀取和寫入QR碼和條碼的程式庫,增強了庫存管理、追蹤和其他相關任務的能力。

Automapper C# (How it Works For Developers): 圖4 - IronBarcode for .NET: The C# Barcode Library

與Automapper的互補性

儘管Automapper擅長在C#中不同物件模型之間映射屬性,Iron Software的程式庫通過提供處理各種資料格式和類型的工具擴展了其功能。例如,在使用Automapper將使用者領域物件轉換為DTO之後,IronPDF可以用來生成以PDF格式的全面報告。 類似地,使用Automapper提取或轉換的資料可以通過IronXL進行進一步的操作或分析以進行Excel文件操作。

結論

Automapper是C#開發者不可或缺的工具,簡化了物件之間的映射任務。 其在映射屬性、處理複雜物件模型及提供可自訂映射配置的強大功能,使其成為有效軟體開發的重要工具。 了解物件模型的複雜性及如何配置Automapper以滿足特定需求,對於最大化其在任何專案中的潛力至關重要。

Iron Software的Iron Suite提供包括免費試用Iron Software在內的多種授權選項,以滿足不同專案需求。 其授權分為Lite、Plus和Professional,以滿足不同團隊規模及提供全面支援功能。 將此套件與Automapper整合,可以大大增強C#專案,增加資料處理和文件操作能力。

常見問題解答

如何在 C# 中有效地在不同對象类型之间映射属性?

您可以在 C# 中使用 Automapper 自動映射不同對象类型之间的属性。通過定义配置,您可以指定源對象属性如何映射到目標對象,减少手動编碼并降低錯误。

在 C# 中使用 Automapper 處理嵌套對象的過程是什么?

Automapper 可以将复杂對象模型展平,允許您将嵌套属性映射到扁平化的目標結构。此功能對于将嵌套對象轉换為簡化的數据傳輸對象 (DTO) 特别有用。

如何将對象映射与 PDF 和 Excel 文件處理集成到C#中?

在使用 Automapper 映射對象属性後,您可以集成 Iron Software 的庫,例如 IronPDF 和 IronXL,以生成报告或處理 PDF 和 Excel 格式的數据,從而增強 C# 項目的數据處理能力。

在現代應用中,使用 Automapper 搭配依赖注入有什么优势?

在 9.0 版本中,Automapper 過渡到基于實例的 API,这增強了与使用依赖注入的現代應用的灵活性和兼容性,允許更動态和可擴展的映射配置。

Automapper 能否處理不同對象模型(如 DTO 和领域對象)的映射?

是的,Automapper 設计用于處理不同對象模型之间的映射,包括用戶领域對象和數据傳輸對象 (DTO),為 C# 應用提供多样的數据傳輸需求。

在 C# 項目中如何開始使用 Automapper?

要在 C# 項目中開始使用 Automapper,通過包管理器控制台使用命令:Install-Package AutoMapper 安装它。然後,定义映射配置以自動化您的對象模型之间的映射過程。

Jacob Mellor, Team Iron 首席技術官
首席技術官

Jacob Mellor是Iron Software的首席技術官,也是開創C# PDF技術的前瞻性工程師。作為Iron Software核心代碼庫的原始開發者,他自公司成立以來就塑造了公司的產品架構,並與CEO Cameron Rimington將公司轉型為服務NASA、Tesla以及全球政府機構的50多人公司。

Jacob擁有曼徹斯特大學土木工程一級榮譽學士學位(1998年–2001年)。他於1999年在倫敦開立首家軟體公司,並於2005年建立了他的第一個.NET組件,專注於解決Microsoft生態系統中的複雜問題。

他的旗艦作品IronPDF和Iron Suite .NET程式庫全球已獲得超過3000萬次NuGet安裝,他的基礎代碼不斷在全球各地驅動開發者工具。擁有25年以上的商業經驗和41年的編碼專業知識,Jacob仍然專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me