我有一个在不同地方运行的Web应用程序和服务层,它们都有自己的业务实体,意味着它们都有自己的类来代表员工,订单等(例如,服务层中的Emp和Web应用程序中的Employee) )。当Web应用程序调用服务层以获取员工列表时,我希望将服务返回的员工列表转换为Web应用程序的员工类型列表。
我正在寻找一种方法来轻松完成这项工作。任何想法都会很棒。顺便说一下,我正在使用ASP.NET和WCF。
答案 0 :(得分:4)
查找AutoMapper。
答案 1 :(得分:3)
您尝试过Automapper吗?
答案 2 :(得分:3)
您可以使用Automapper:
https://github.com/AutoMapper/AutoMapper
它可以帮助您将一种类型映射到另一种类型。您的输入对象(WCF)将转换为另一种类型的对象(Web应用程序)。 Automapper能够(很大一部分)自动解决这个问题。需要很少的配置。
要映射两种类型:
Mapper.CreateMap<WcfEmployee, WebAppEmployee>();
将类型转换为另一种类型:
WebAppEmployee employee = Mapper.Map<WcfEmployee, WebAppEmployee>(employee);
在大多数情况下,Automapper使用基于名称的约定来映射两种类型,但是IIRC你当然可以调整它。为此,您需要告知Automapper您的约定规则。换句话说,它应该如何映射你的类型的规则。
答案 3 :(得分:3)
使用AutoMapper。
AutoMapper是一个简单的小型库,用于欺骗性地解决问题 复杂的问题 - 摆脱映射一个对象的代码 另一个。这种类型的代码相当沉闷,写起来很无聊,所以 为什么不为我们发明一个工具?
一般功能
在automapper之前
var meeting = _repository.GetMeetingById(meetingId);
var dto = new MeetingDto();
dto.Begins = meeting.Begins;
dto.End = meeting.End;
dto.Attendees = meeting.Attendees;
dto.AttendeesCount = meeting.Attendees.Count;
//do something meaningful
并使用自动映射器
var meeting = _repository.GetMeetingById(meetingId);
var dto = Mapper.Map<Meeting, MeetingDto>(meeting);
答案 4 :(得分:1)
就我个人而言,我不建议以简单的方式进行,而是以非常简洁的方式进行。只将服务中的内容映射到应用程序实际需要的应用程序,并且只显示必须公开的内容。换句话说,保持尽可能多,优选服务在eappapp对象内部公开的所有数据。
通常,来自服务的数据用于基于功能。公开功能而不是数据。这将使您可以完全更改数据结构(只要它支持相同的心理模型/功能要求),而不必根据应用程序端对象重写任何内容。您当然需要重写应用程序端类。
答案 5 :(得分:0)
receivedEmployesArray.Select(x => new MyWinFormsEmploeType(x)); // if you create intializaion in constructor
receivedEmployesArray.Select(x => new MyWinFormsEmploeType() {
Name = x.Name,
Position = x.Position
}); // trasfering property to property
或者最先进的方式 - 使用automapper
答案 6 :(得分:0)
如果类属性共享相同的名称,并且键入最简单的方法是通过JsonSerializer:
package main
/*
#include<stdbool.h>
typedef const char cchar_t;
*/
import "C"
//export f1
func f1(str *C.cchar_t) C.bool {
return false
}
func main() {}