如何克隆(生成代码)一个类的所有字段到另一个类?

时间:2014-03-01 09:22:52

标签: c# visual-studio

我正在编写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课程

3 个答案:

答案 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