假设我有两个对象:
class Order
{
string Name {get; set;}
Customer Customer {get; set;}
Item[] Items {get; set;}
}
and
class OrderDTO
{
string Name {get; set;}
CustomerDTO Customer {get; set;}
ItemDTO[] Items {get; set;}
}
如果我收到一个物体orderDTO
已满员并且做orderDTO.TranslateTo<Order>()
结果只会有Name
有人口,没有Customer
or Items
。有没有办法进行递归翻译,或者唯一的选择是手动翻译客户和每个项目?
我会将其包装在可重用的扩展方法中,例如:
public static OrderDTO ToDto(this Order from)
{
return new OrderDTO {
Name = from.Name,
Customer = from.ConvertTo<CustomerDTO>(),
Items = from.Items.Map(x => x.ConvertTo<ItemDTO>()).ToArray(),
}
}
然后,每当您需要映射到订单 DTO 时就可以调用它,例如:
return order.ToDto();
ServiceStack 的更多示例自动映射可在 wiki 上找到 https://github.com/ServiceStack/ServiceStack/wiki/Auto-mapping.
ServiceStack 的原则是,如果您的映射需要的不仅仅是从自动映射器推断出的默认常规行为,那么您应该将其包装在 DRY 扩展方法后面,以便您的映射所需的扩展和自定义可以在代码中清晰表达并轻松维护。建议对 ServiceStack 中的许多事情使用此方法,例如在代码中维护非常规且复杂的 IOC 绑定,而不是依赖于晦涩的重量级 IOC 功能。
如果您愿意,当然可以采用像 AutoMapper 这样的第三方工具。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)