映射两个相同的对象

本文关键字:对象 两个 映射 | 更新日期: 2023-09-27 17:57:50

我有两个具有精确属性的对象(类)。比如:

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

这是有效的,直到它涉及到一个属性,我在对象类中有这样的东西:

property class3 parentClass{get; set;}

在DTO_对象类中,我得到了:

 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.

映射两个相同的对象

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

为了克服这个问题,您需要编写一个转换方法。例如,如果该方法被称为ConvertGuidToParentClassInstance,那么您可以编写这样的映射:

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

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