JSONから動的に作成される動的オブジェクト(実際にはJSON.NETのJObject)があります。 プロパティを既存のオブジェクトにコピーしたいと思っています。動的オブジェクトのプロパティがターゲットオブジェクトの型に存在する必要があります。存在しない場合は、エラーが発生しても問題ありません。 私はAutomapper、最新版を見ています。 JObjectから適切な型にマップを作成しようとしましたが、JObjectのプロパティが内部ディクショナリに格納されているため、動作しないと思います。 これはまったく可能ですか?Automapperを使用して動的からプロパティをコピーする
2
A
答えて
4
はい、可能です。
すでにJObject
がある場合は、Automapperを使用してプロパティを既存のターゲットオブジェクトにコピーする必要はありません。 Json.Netシリアライザはこれを行うPopulateObject()
メソッドを提供します。
jObj.PopulateObject<Foo>(existingFoo);
注:あなたはこれを行うことができますプロパティをコピーする必要がある時はいつでも、次に
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
public static class JsonExtensions
{
public static void PopulateObject<T>(this JToken jt, T target)
{
JsonSerializer serializer = new JsonSerializer();
serializer.Populate(jt.CreateReader(), target);
}
}
:あなたはそれが簡単に右JOBJECTから呼び出すために作るために拡張メソッドを作成することができますあなたの変数場合ここで
((JObject)jObj).PopulateObject<Foo>(existingFoo);
は、cを証明するための簡単なデモです:それは、jオブジェクトは、ランタイムバインダーは、拡張メソッドを見つけることができるので、あなたはそれをキャストする必要がありますdynamic
として宣言されて保持していますoncept:https://dotnetfiddle.net/dhPDCj
Automapperを使用する方がいい場合は、通常のメンバーベースのマッピングではなく、この同じ変換を実行するように設定できます。トリックは、マッピングを設定するときConvertUsing
メソッドを使用することです:
Mapper.Initialize(cfg => cfg.CreateMap<JObject, Foo>().ConvertUsing((jo, foo) =>
{
JsonSerializer serializer = new JsonSerializer();
serializer.Populate(jo.CreateReader(), foo);
return foo;
}));
[プロパティコピーするには、このコードを使用:いいえ
Mapper.Map<JObject, Foo>(jObj, existingFoo);
関連する問題
- 1. AutoMapperを使用してSuperClassからSubClassにデータをコピーする
- 2. AutoMapperを使用してリストアイテムをコピーする
- 3. C#Automapperカスタムリゾルバからプロパティを使用して解決する方法
- 4. 共有プロパティでAutoMapperを使用していますか?
- 5. Automapperを使用してコピー先のクラスにコピー元としてソースを保持
- 6. Automapperを使用して内部プロパティにマップする方法は?
- 7. AutoMapper - AutoMapper 5を使用して例外
- 8. AutoMapperを使用して配列を複数のプロパティにマッピングする方法は?
- 9. Automapperを使用してIQueryableを返す
- 10. AutoMapperを使用してプロパティをオーバーライドする派生クラスごとに仮想プロパティを明示的にマッピングせずにマップする方法はありますか?
- 11. 動的プロパティキーを使用してjavascriptオブジェクトのプロパティ値を取得
- 12. 3番目のレベルのプロパティにAutomapperを使用しているLINQ
- 13. Splinterを使用して動的メニューから選択する
- 14. AutoMapperを使用するユニットテストコントローラ
- 15. リポジトリパターンを使用してEntity Frameworkで使用するAutomapper?
- 16. Automapper静的APIを最新リリースで使用していますか?
- 17. AutoMapperを使用してオブジェクトフィールドを配列にマップしますか?
- 18. ValueFormatterを使用したAutoMapper
- 19. AutoMapperを使用してPOCOからHibernateプロキシオブジェクトにマップするときのエラー
- 20. バッチを使用してウィンドウからアンドロイドにファイルをコピーする
- 21. JAVAを使用してHDFSからローカルファイルシステムにファイルをコピーする
- 22. コマンドラインからURLを使用してファイルをコピーする
- 23. Automapperとenumプロパティ
- 24. AutoMapperを使用して基本クラスのプロパティを設定することはできますか?
- 25. Automapper:ターゲットに不足しているプロパティを無視する
- 26. リフレクションとextesnionメソッドを使用してオブジェクト間のプロパティをコピー
- 27. 動的APIレスポンスからプロパティを削除
- 28. 動的プロパティから値を取得
- 29. Expectを使用してリモートから別のファイルにコピーする
- 30. CopyArtifactを使用して特定のビルドからコピーする
を...私は明示的に私がTJEプロパティをコピーするwated言っ*既存*オブジェクト! –
申し訳ありませんが、私は何とかあなたの質問の詳細を逃した。私は私の答えを更新しました。 –