映射两个相同的对象

时间:2013-02-04 17:40:05

标签: c# object reflection mapping

我有两个具有确切属性的对象(类)。说:

class class1
{
  public string prop1{get;set;}
  public string prop2{get;set;}
}

class class2
{
    public string prop1{get;set;}
    public string prop2{get;set;}
}

我想使用反射来映射这些类,我已经使用过AutoMapper并且它对我的情况不起作用,因为我在对象内部有对象....

使用反射时,我需要传递属性名称,我不想一个接一个地执行此操作:

PropertyInfo propinfo = listToReturn.GetType().GetProperty(nameofproperty);

修改::

以下是我尝试使用automapper的内容:

 internal static DTO_objectclass  ConvertFOS(objectclass q)
        {
            DTO_objectclass  resultsToReturn = new DTO_objectclass();

            AutoMapper.Mapper.CreateMap<objectclass , DTO_objectclass  >();

            resultsToReturn = AutoMapper.Mapper.Map<objectclass , DTO_objectclass>(q);

            return resultsToReturn;
        }

这一直有效,直到我在objectclass中有类似这样的东西:

property class3 parentClass{get; set;}

在DTO_objectclass中我得到了:

 property guid parentClass{get; set;}

我得到转换失败的例外..

Trying to map System.Guid to parentclient.\nUsing mapping configuration for DTO_objectclass   to objectclass \nDestination property: ParentClass\nException of type 'AutoMapper.AutoMapperMappingException' was thrown.

1 个答案:

答案 0 :(得分:1)

该例外解释了这个问题。 AutoMapper无法将GUID转换为ParentClass。 AutoMapper将假设在没有更好的信息的情况下,具有相同名称的两个属性/字段将具有相同的类型。

要解决此问题,您需要编写转换方法。例如,如果该方法被称为ConvertGuidToParentClassInstance,则可以编写如下映射:

Mapper.CreateMap<DTO_objectcass, objectclass>()
  .ForMember(dest => dest.parentClass)
    .MapFrom(src => ConvertGuidToParentClassInstance(src.parentClass));

有了这样的映射,AutoMapper可以处理这种情况。