1

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

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);

编辑::

这是我用自动映射器尝试过的:

 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.
4

1 回答 1

1

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

为了克服这个问题,您需要编写一个转换方法。ConvertGuidToParentClassInstance例如,如果调用了该方法,则可以编写如下映射:

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

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

于 2013-02-04T18:04:46.047 回答