我正在编写一个 WCF 服务,我想使用基本上克隆我的类的所有字段的 DataTransferObjects。
例如我有一个类 Person
class Person
{
public int Id;
public string Name;
public Person()
{
//Some complex stuff here
}
}
class PersonDTO
{
//Copy all public fields and properties of Person
public int Id;
public string Name;
}
有没有办法根据其他类生成我的 DTO 类?代码片段或类似的东西?
我不是要复制字段的值。我想生成一个与“父”类具有相同字段的类。但是我不想继承我的 DTO 类
最佳答案
您可以使用 T4 模板从您的实体生成 DTO。这是文章 Code generation with T4, Entities to DTOs example其中附有用于从实体生成 DTO 的示例项目。
主要思想是提供与实体组装的路径:
var entitiesAssembly = @"bin\Debug\EntitiesToDTO.dll";
然后从该程序集中获取所有实体类型:
var typesToRegister =
from t in LoadProjectAssembly(entitiesAssembly).GetExportedTypes()
where t.Namespace == entitiesNamespace && t.IsClass && !t.IsAbstract
select t;
并循环处理它们:
<#
foreach (var type in typesToRegister.Where(t => t.IsClass && !t.IsAbstract))
{#>
[DataContract(Name="<#= ConvertToCamelCase(type.Name) #>]
public partial class <#= GetDTOClassName(type.Name) #>
{
<# foreach (var property in type.GetProperties())
{#>
// analyze property type
// and generate appropriate DataMember property
<#}#>
}
<#}#>
关于c# - 如何将一个类的所有字段克隆(生成代码)到另一个类中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22112487/