我正在编写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类?代码片段或类似的内容?
我不是要复制字段的值。我想生成一个与“Parent”类具有相同字段的类。但我不想继承我的DTO课程
答案 0 :(得分:1)
查看T4 templates,这将有助于您生成代码。它不会那么难,但也不容易。完成单课后,您可以重复使用它。
答案 1 :(得分:1)
您可以使用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
<#}#>
}
<#}#>
答案 2 :(得分:0)
听起来你正在寻找的是深度克隆。 您基本上序列化要复制的对象,然后反序列化结果。
看看这里:Deep cloning objects