本篇AutoMapper使用場(chǎng)景:
※ Decimal轉(zhuǎn)換成String類(lèi)型
※ 源數(shù)組轉(zhuǎn)換成目標(biāo)數(shù)組
※ 源中的集合(數(shù)組)屬性轉(zhuǎn)換成目標(biāo)中的集合(數(shù)組)屬性
※ 子類(lèi)父類(lèi)間的映射
Decimal轉(zhuǎn)換成String類(lèi)型
□ Domain model
public class Order
{
public decimal Amount { get; set; }
}
□ View model
public class OrderListViewModel
{
public string Amount { get; set; }
}
□ 通過(guò)實(shí)現(xiàn)ValueFormatter<>,可以實(shí)現(xiàn)類(lèi)型的轉(zhuǎn)換
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);
}
□ 要點(diǎn)
屬性類(lèi)型的轉(zhuǎn)換,我們可以自定義ValueFormatter<>。
源數(shù)組轉(zhuǎn)換成目標(biāo)數(shù)組
□ 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());
}
□ 要點(diǎn)
創(chuàng)建映射是單個(gè)類(lèi)之間的映射,但可以根據(jù)源集合獲取到目標(biāo)集合。
源中的集合(數(shù)組)屬性轉(zhuǎn)換成目標(biāo)中的集合(數(shù)組)屬性
□ 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);
}
子類(lèi)父類(lèi)間的映射
//父類(lèi)
public class Foo
{
public int Value { get; set; }
}
//子類(lèi)
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);
}
□ 要點(diǎn)
繼承關(guān)系類(lèi)之間的映射不需要做映射配置
|
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注