Automapper C#(開發者的工作原理)
Automapper 是 C# 中的一個多功能且功能強大的函式庫,設計用來促進物件對物件的映射,讓複雜的物件模型之間的資料傳輸變得更容易且更易於維護。 在這篇文章中,我們將探討 Automapper 如何有效地映射屬性、扁平化複雜的物件模型,以及處理各種類型的物件,例如使用者領域物件和資料傳輸物件。
Automapper 簡介
Automapper in C# 是一種物件對物件的映射器,是一種簡化在不同物件類型之間轉換和傳輸資料的工具。這在涉及資料實體及其轉換為資料傳輸物件 (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();
Dim config = New MapperConfiguration(Sub(cfg)
cfg.CreateMap(Of SourceClass, DestinationClass)()
End Sub)
Dim mapper As IMapper = config.CreateMapper()
- 在上面的範例中,建立了一個映射配置,將屬性從
SourceClass對應到DestinationClass。 然後使用此配置建立IMapper的實例。
使用 Automapper 的高級地圖繪製技術
Automapper 的功能遠超過簡單的屬性對屬性對應。 它可以輕鬆處理更複雜的情境。
扁平化複雜的物件模型
Automapper 的優勢之一是它能夠扁平化複雜的物件模型。 此功能在處理巢狀物件時特別有用,可將這些巢狀屬性映射到平面的目的類別結構。
多變的物件類型處理
Automapper 能夠精準地在各種物件類型之間進行映射,包括使用者網域物件、DTO,甚至是檢視模型,為不同的資料傳輸需求提供多樣化的解決方案。
實際使用範例
為了更好地瞭解 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);
Public Class User
Public Property FirstName() As String
Public Property LastName() As String
Public Property Address() As String
Public Property City() As String
End Class
Public Class UserDTO
Public Property FullName() As String
Public Property Address() As String
Public Property City() As String
End Class
' Mapping Configuration
Private config = New MapperConfiguration(Sub(cfg)
cfg.CreateMap(Of User, UserDTO)().ForMember(Function(dest) dest.FullName, Function(opt) opt.MapFrom(Function(src) src.FirstName & " " & src.LastName))
End Sub)
Private mapper As IMapper = config.CreateMapper()
Private user As New User With {
.FirstName = "John",
.LastName = "Doe",
.Address = "123 Street",
.City = "CityName"
}
Private userDto As UserDTO = mapper.Map(Of UserDTO)(user)
- 此範例展示了
User和UserDTO之間的映射,其中UserDTO中的FullName是FirstName和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);
Public Class Order
Public Property OrderedBy() As User
' Other properties...
End Class
Public Class OrderDTO
Public Property FullName() As String
' Other properties...
End Class
' Mapping Configuration
Private config = New MapperConfiguration(Sub(cfg)
cfg.CreateMap(Of Order, OrderDTO)().ForMember(Function(dest) dest.FullName, Function(opt) opt.MapFrom(Function(src) src.OrderedBy.FirstName & " " & src.OrderedBy.LastName))
End Sub)
Private mapper As IMapper = config.CreateMapper()
Private order As New Order With {
.OrderedBy = New User With {
.FirstName = "Jane",
.LastName = "Doe"
}
}
Private orderDto As OrderDTO = mapper.Map(Of OrderDTO)(order)
- 此範例示範如何將包含嵌套的
Order詳細資訊的OrderedBy物件對應到扁平的OrderDTO,並將使用者名稱擷取並合併到單一FullName屬性中。
從 9.0 版本開始,AutoMapper 已從靜態 API (Mapper.Initialize) 過渡到基於實例的 API。 這項變更增強了彈性,更適合現代應用程式,尤其是使用依賴注入的應用程式。 如果您使用的是 9.0 以上的版本,則適用靜態 API 方法。 不過,對於較新的版本,建議採用上述範例中概述的基於實例的 API。
Iron Software Suite 概觀。
Iron Software Suite 適用於 .NET 是一個功能強大的套件,包含一系列函式庫,每個函式庫都有特定的用途。 它涵蓋的功能包括建立、閱讀和編輯 PDF、將 HTML 轉換為 PDF,以及將影像處理為多國語言的文字。 本套件可滿足各種開發需求,使其成為任何 C# 專案的多功能補充。
Iron Software Suite 的主要組成部分
1.IronPDF for PDF Management:此元件可讓開發人員建立、閱讀、編輯和簽署 PDF。 它還提供將 HTML 轉換為 PDF 的功能,這項功能在從網頁資料產生報告或文件時特別有用。

2.IronXL Excel 檔案處理: IronXL 可在不需要 Office Interop 的情況下輕鬆處理 Excel 檔案,簡化資料處理和分析工作。
。
3.IronOCR for Text Extraction:它可以從影像中萃取文字,支援多達 125 種語言,因此在國際專案中具有高度的通用性。
。
4.支援 QR 與條碼的 IronBarcode:可讀取、寫入 QR 碼與 BarCode 的函式庫,可增強庫存管理、追蹤及其他相關工作的能力。
。
與 Automapper 的互補性
雖然 Automapper 在 C# 中擅長映射不同物件模型之間的屬性,但Iron Software 的程式庫透過提供處理各種資料格式和類型的工具來擴展其功能。例如,在使用 Automapper 將使用者網域物件轉換為 DTO 後,可以使用 IronPDF 產生 PDF 格式的綜合報告。 同樣地,使用 Automapper 擷取或轉換的資料也可以使用 IronXL.Excel 檔案作進一步的操作或分析。
結論
Automapper是 C# 開發人員的寶貴工具,可簡化物件之間的對應任務。 它在映射屬性、處理複雜物件模型以及提供自訂映射配置方面的強大功能,使其成為高效軟體開發的必要工具。 瞭解物件模型的複雜性,以及如何設定 Automapper 以符合特定需求,對於在任何專案中發揮其最大潛力至關重要。
Iron Software 的 Iron Suite 提供多種授權選項,包括 免費試用 Iron Software ,以符合不同專案的需求。 其 License 分為 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 安装它。然後,定义映射配置以自動化您的對象模型之間的映射過程。



