C#:用于将一个复杂对象映射到另一个对象的库

时间:2010-02-01 12:55:00

标签: c#

我从服务器获取了一个复杂的对象 - 我们称之为ServerDTO。我想将它映射到客户端对象 - 我们称之为ClientDTO。

假设ServerDTO和& ClientDTO内部具有相同的结构。

我想将ServerDTO对象映射到ClientDTO对象。 像这样非常简单的映射:

ServerDTO sd = server.Result;
ClientDTO cd = new ClientDTO();
cd.Property1 = sd.Property1;
cd.JahRas = sd. JahRas;

依旧......

到目前为止一切顺利。

现在我的问题是这个映射是否可以在一些抽象层中完成,它可以处理我所有对象的所有映射,无论它们是什么类型或内部是什么?

所以,当我想要映射时,我会去:

ClientDTO cd = Mapper.Map(sourceServerDTO, typeOf(ClientDTO)); 

4 个答案:

答案 0 :(得分:10)

您可能需要查看Automapper

答案 1 :(得分:1)

史蒂夫说,我试着只使用一种类型。要避免直接引用Web服务,请将所有接口/公共类型迁移到客户端和服务器都将引用的公共程序集中。显然,这假设你有两个代码库。

答案 2 :(得分:0)

如果2个对象具有相同的结构并且您想镜像内容,为什么还需要2种不同的类型?您是否也可以在客户端代码中使用ServerDTO类型?

我知道有时你需要单独的类型,但在这之前我会三思而行。

如果你确实需要不同的类型,那么我认为Automapper(Lee在单独的答案中发布的链接)是一个不错的选择。

答案 3 :(得分:0)

客户端和服务器之间的共享类型仅在您不打算使用不同的应用程序调用同一服务器时才有效。 (这种方式打败了拥有一套服务器的主要好处之一) 如果您共享类型,最终会出现一个域模型的大肆挥霍,其中一个应用程序中的更改会破坏另一个应用程序中的内容。即在一个甚至不涉及更改服务界面的客户端上进行小规模更改可能会导致整个应用程序套件的推出。

我永远不会说永远,但共享类型很少是一个好主意。