[解決済み】AutoMapper: "残りを無視する"?
2022-04-06 03:16:35
質問
AutoMapper に、明示的にマッピングされたプロパティ以外を無視するように指示する方法はありますか。
外部から変更される可能性のある外部DTOクラスがあり、新しいプロパティを追加すると、自分のオブジェクトにマッピングしようとしたときに機能が壊れる(例外が発生する)ので、明示的に無視するプロパティをそれぞれ指定するのは避けたいのです。
どのように解決するのですか?
これは、私が書いた、宛先に存在しないすべてのプロパティを無視する拡張メソッドです。この質問は2年以上前のものなので、まだ役に立つかどうかわかりませんが、私は多くの手動Ignoreコールを追加しなければならない同じ問題に遭遇しました。
public static IMappingExpression<TSource, TDestination> IgnoreAllNonExisting<TSource, TDestination>
(this IMappingExpression<TSource, TDestination> expression)
{
var flags = BindingFlags.Public | BindingFlags.Instance;
var sourceType = typeof (TSource);
var destinationProperties = typeof (TDestination).GetProperties(flags);
foreach (var property in destinationProperties)
{
if (sourceType.GetProperty(property.Name, flags) == null)
{
expression.ForMember(property.Name, opt => opt.Ignore());
}
}
return expression;
}
使用方法
Mapper.CreateMap<SourceType, DestinationType>()
.IgnoreAllNonExisting();
アップデイト : どうやら、カスタムマッピングがある場合は上書きされてしまうため、正しく動作しないようです。IgnoreAllNonExistingを先に呼んで、カスタムマッピングを後で呼ぶようにすれば、まだ動くと思います。
schdrは(この質問に対する回答として)解決策を用意しており、それは
Mapper.GetAllTypeMaps()
を使用して、マッピングされていないプロパティを見つけ、それらを自動的に無視します。私にはより堅牢なソリューションのように思えます。
関連
-
[解決済み] app.configのマッピングがないアセンブリのapp.configの再マッピングを考慮する。
-
[解決済み] Marginのプロパティ順
-
[解決済み] EF Coreのadd-migrationのビルドに失敗しました。
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] usingディレクティブはネームスペースの内側と外側のどちらを使うべきですか?
-
[解決済み] IDisposable インターフェースの正しい使用法
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] MemoryStreamから文字列を取得する方法は?
-
[解決済み] Microsoft.ACE.OLEDB.12.0' プロバイダがローカルマシンに登録されていません。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] アセンブリから型を読み込めなかったエラー
-
[解決済み] "ItemsSourceを使用する前に、Itemsコレクションを空にする必要があります。"
-
[解決済み] LINQ to Entitiesはメソッドを認識しません。
-
[解決済み] AssemblyInfo.csは何に使うのですか?
-
[解決済み] VB.NETでファイル名を一意のサフィックスに変更するには?
-
[解決済み] 1は有効なWin32アプリケーションではありません "を解決するには?
-
[解決済み] "SSL/TLSセキュアチャネルの信頼関係を当局と確立できませんでした "の解決方法
-
[解決済み] app.configが作成されるタイミングとapp.exe.configが作成されるタイミング、その違いとは?
-
[解決済み] MemoryStreamから文字列を取得する方法は?
-
[解決済み] Visual Studioの「Any CPU」ターゲットはどういう意味ですか?