【问题标题】:mapping two identical objects映射两个相同的对象
【发布时间】:2013-01-19 11:31:01
【问题描述】:

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

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.

【问题讨论】:

  • 你为什么要那样做,那是在浪费代码。
  • 不要这样做,这是未成熟的优化,使用反射会降低性能
  • 您为什么不发布您的 Automapper 问题,以便有人可以帮助解决这个问题,而不是试图重新发明它已经在做的事情?
  • 那我该怎么做
  • @IanMercer 将编辑我的帖子并添加自动映射器

标签: c# object reflection mapping


【解决方案1】:

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

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

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

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

【讨论】:

  • 嗨,如果我有两个带有父类的属性怎么办?那会在同一个createmap中吗
  • 我很高兴你知道了。它可以在同一个CreateMap 调用中完成。这是一个流畅的界面,因此您可以将ForMember 链接到您心中的内容。
猜你喜欢
  • 1970-01-01
  • 2012-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-23
  • 2018-06-15
  • 1970-01-01
  • 2017-10-23
相关资源
最近更新 更多