1

正確なプロパティを持つ 2 つのオブジェクト (クラス) があります。いう :

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を使用していますが、オブジェクト内にオブジェクトがあるため、私の状況では機能しません....

リフレクションを使用する場合、プロパティ名を渡す必要がありますが、これを 1 つずつ実行したくありません。別の方法があります。

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

1 に答える 1

1

例外は問題を説明します。AutoMapperはGUIDをParentClassに変換できません。AutoMapperは、より適切な情報がない場合、同じ名前の2つのプロパティ/フィールドが同じタイプであると想定します。

これを克服するには、変換メソッドを作成する必要があります。たとえば、そのメソッドが呼び出されConvertGuidToParentClassInstanceた場合、次のようなマッピングを記述できます。

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

このようなマッピングが適切に行われていると、AutoMapperはこのケースを処理できます。

于 2013-02-04T18:04:46.047 に答える