C# 是否有任何框架或实用程序(在.NET空间中)用于从业务对象自动生成数据传输对象

C# 是否有任何框架或实用程序(在.NET空间中)用于从业务对象自动生成数据传输对象,c#,reflection,code-generation,data-transfer-objects,C#,Reflection,Code Generation,Data Transfer Objects,我正在寻找使用一组约定(例如,所有公共属性)从业务对象(类型定义,而不是映射数据)生成数据传输对象的最佳方法,并且可能可以配置以确定深度 我意识到,在dto与业务对象不相似的许多情况下(例如将多个业务对象扁平化为单个数据传输对象时),这可能是不可能的,甚至是不可取的 但是,在我的例子中,很大一部分数据传输对象与它们的业务对象非常相似(尤其是用于更新数据的DTO) 我想知道是否有任何现有的代码生成工具(我正在寻找使用现有模板的特定解决方案,而不仅仅是像CodeSmith这样的通用代码生成工具)或动

我正在寻找使用一组约定(例如,所有公共属性)从业务对象(类型定义,而不是映射数据)生成数据传输对象的最佳方法,并且可能可以配置以确定深度

我意识到,在dto与业务对象不相似的许多情况下(例如将多个业务对象扁平化为单个数据传输对象时),这可能是不可能的,甚至是不可取的

但是,在我的例子中,很大一部分数据传输对象与它们的业务对象非常相似(尤其是用于更新数据的DTO)


我想知道是否有任何现有的代码生成工具(我正在寻找使用现有模板的特定解决方案,而不仅仅是像CodeSmith这样的通用代码生成工具)或动态程序集创建工具(例如,在封面下使用反射发射)?或者,如果这是您以前做过的事情,我想听听您使用了什么技术来帮助我在各种选项之间做出选择。

您可能会发现AutoMapper非常有用:

编辑,回应OP评论: T4模板包含在Visual Studio中,用于生成代码。下面是一篇关于实体到DTO的文章,用T4生成代码:


您可能会发现AutoMapper非常有用:

编辑,回应OP评论: T4模板包含在Visual Studio中,用于生成代码。下面是一篇关于实体到DTO的文章,用T4生成代码:


在某种程度上,.NET框架本身可以通过匿名类实现这一点

例如,使用Linq to对象(例如您的业务对象),您可以将结果集“投影”到匿名类(列表)中


目前这种方法的主要缺点是它们的可移植性不强,但是对于.NET 4.0和动态类,我敢说您不需要使用第三方解决方案,我认为您可以使用框架本身的工具。

在某种程度上,.NET框架本身可以使用匿名类来实现这一点

例如,使用Linq to对象(例如您的业务对象),您可以将结果集“投影”到匿名类(列表)中


这种方法的主要缺点是,目前它们的可移植性不是很好,但是对于.NET 4.0和动态类,我敢说您不需要使用第三方解决方案,我认为您将拥有框架本身的工具。

我也推荐使用。您可以使用反射来输入元数据,并且实际的模板看起来类似于asp标记。这是内置于VS中的。

我也推荐。您可以使用反射来输入元数据,并且实际的模板看起来类似于asp标记。这篇文章内置于VS.

最近的codeproject文章可能会帮助其他人跟上进度:谢谢你的回答,但据我所知,AutoMapper要求你已经有了一个Dto对象来映射。我正在寻找一个工具来为我生成Dto类型,这样我就可以使用AutoMapper(或其他方法)从业务对象映射到Dto。最近的codeproject文章可能会帮助其他人跟上速度:感谢您的回答,但据我所知,AutoMapper要求您已经有了一个Dto对象来映射。我正在寻找一个工具来为我生成Dto类型,这样我就可以使用AutoMapper(或其他方法)从业务对象映射到Dto。听起来很有希望,尽管动态创建的对象需要序列化才能通过网络传输,人们需要对生成的xml有足够的控制,以便能够在另一端反序列化为等效(但不同)类型。一旦我有机会进行进一步调查,我将对此发表进一步的评论。听起来很有希望,尽管动态创建的对象需要可序列化才能通过网络传输,并且需要对生成的xml有足够的控制才能反序列化为等价的(但不同的)在导线的另一端键入。一旦我有机会进一步调查,我会发表更多的评论。