本篇AutoMapper使用場景:
※ Decimal轉換成String類型
※ 源數組轉換成目標數組
※ 源中的集合(數組)屬性轉換成目標中的集合(數組)屬性
※ 子類父類間的映射
Decimal轉換成String類型
□ Domain model
public class Order
{
public decimal Amount { get; set; }
}
□ View model
public class OrderListViewModel
{
public string Amount { get; set; }
}
□ 通過實現ValueFormatter<>,可以實現類型的轉換
public class MoneyFormatter : ValueFormatter<decimal>
{
PRotected override string FormatValueCore(decimal value)
{
return value.ToString("C");
}
}
□ 映射配置
AddFormatter<MoneyFormatter>();
Mapper.CreateMap<Order, OrderListViewModel>();
□ 使用
public ActionResult Index()
{
var order = new Order {Amount = 85M};
var orderListViewModel = Mapper.Map<Order, OrderListViewModel>(order);
return View(orderListViewModel);
}
□ 要點
屬性類型的轉換,我們可以自定義ValueFormatter<>。
源數組轉換成目標數組
□ Domain model
public class Source
{
public int Value { get; set; }
}
□ View model
public class Dest
{
public int Value { get; set; }
}
□ 映射配置
Mapper.CreateMap<Source, Dest>();
□ 使用
public ActionResult ArraySample()
{
var sourceArray = new[]
{
new Source{Value = 1},
new Source{Value = 5},
new Source{Value = 10}
};
var destArray = Mapper.Map<Source[], Dest[]>(sourceArray);
return View(destArray.ToList());
}
□ 要點
創建映射是單個類之間的映射,但可以根據源集合獲取到目標集合。
源中的集合(數組)屬性轉換成目標中的集合(數組)屬性
□ Domain model
public class Order1
{
private IList<Order1Line> _lineItems = new List<Order1Line>();
public Order1Line[] LineItems
{
get { return _lineItems.ToArray(); }
}
public void AddLineItem(Order1Line orderLine)
{
_lineItems.Add(orderLine);
}
}
public class Order1Line
{
public int Quantity { get; set; }
}
□ View model
public class Order1Dto
{
public Order1LineDto[] LineItems { get; set; }
}
□ 映射配置
Mapper.CreateMap<Order1, Order1Dto>();
□ 使用
public ActionResult ArraySample1()
{
var order1 = new Order1();
order1.AddLineItem(new Order1Line(){Quantity =5});
order1.AddLineItem(new Order1Line(){Quantity = 15});
order1.AddLineItem(new Order1Line(){Quantity = 25});
var order1Dto = Mapper.Map<Order1, Order1Dto>(order1);
return View(order1Dto);
}
子類父類間的映射
//父類
public class Foo
{
public int Value { get; set; }
}
//子類
public class Bar : Foo
{
pubic int Value{get;set;}
}
public ActionResult JiCheng()
{
var source = new Bar() {Value = 5};
var dest = Mapper.Map<Bar, Foo>(source);
return View(dest);
}
□ 要點
繼承關系類之間的映射不需要做映射配置
新聞熱點
疑難解答