1

Automapperを使用して、標準のSystem.string、System.DateTimeに自動マップする多くの自家製の「StringType」および「DateTimeType」フィールドを含むオブジェクトからマップしています。ソースオブジェクトにすべてのメンバーを登録せずにこれを行う方法はありますか?

私はこのようなことをしようとしています:

        Mapper.CreateMap<StringType, string>()
            .ForAllMembers(q =>
                {
                    q.NullSubstitute(string.Empty);
                    q.MapFrom(p => p.Value);
                });
        Mapper.CreateMap<DateTimeType, DateTime>()
            .ForAllMembers(q =>
            {
                q.NullSubstitute(DateTime.MinValue);
                q.MapFrom(p => p.Value);
            });
        Mapper.CreateMap<InType, OutType>();

「InType」から「OutType」に実際に変換しようとすると、「ソースオブジェクトがnull」の例外が発生し続けます。ValueResolversを使用して変換を定義しようとしましたが、役に立ちませんでした。

これを行う正しい方法は何ですか?(stackoverflowで同様の質問を見ましたが、私が見た答えはすべて、この状況を処理するための構成手順やさらに別のライブラリのダウンロードが含まれていることを示唆しています:そのようなすべての場合、私自身の解決策はAutomapperをダンプして手書きの変換、時間を節約し、コードを一度に読みやすくします。)

4

1 に答える 1

2

カスタム型コンバーターを見ましたか?

私はそれがトリックを行うべきだと思います...

このリンクはそれほど「若い」ものではありませんが、数週間前に見ましたが、まだ役に立ちました

http://lostechies.com/jimmybogard/2009/05/06/automapper-feature-custom-type-converters/

あなたはそのようなものを持っているでしょう(未テスト)

public class StringTypeToStringResolver : ITypeConverter<StringType, string> {
    public string Convert(StringType source) {
        return source == null ? string.Empty : source.Value;
    }
}

そしてそのようなマッピング宣言

Mapper.CreateMap<StringType, string>().ConvertUsing(new StringTypeToStringResolver());
Mapper.CreateMap<InType, OutType>();
于 2012-04-26T16:24:23.163 に答える