2017-11-24 6 views
2

パラメータがdynamicのASP.NET Coreコントローラメソッドでは、以下のようにAutomapperを使用してマップしたいと思います。この方法は、次のようになります。複数のマップを作成せずにAutomapperを使用して動的/ JObjectから任意の型にマップする

EmployerViewModelはこのようになります
public IActionRsult Post([FromBody] dynamic model) { 
    // Skip validation 
    switch(model.src) { 
    case "employer" 
     var employerVM = _mapper.Map<EmployerViewModel>(model.data); 
     // Work with mapped object 
    break; 
    case "employee" 
     var employeeVM = _mapper.Map<EmployeeViewModel>(model.data); 
     // Work with mapped object 
    break; 
    } 
} 

public class EmployerViewModel { 
    public string CompanyName {get; set;} 
    public string CompanyAddress {get; set;} 
} 

EmployeeViewModel次のようになります。それはかもしれない、クライアント側からJSONデータを、受信

public class EmployeeViewModel { 
    public string FirstName {get; set;} 
    public string LastName {get; set;} 
    public bool Ready {get; set;} 
} 

次のようになります。

またはこの:

{ 
    "src": "employee", 
    "data": { 
    "FirstName": "John", 
    "LastName": "Doe", 
    "Ready": true 
    } 
} 

今、すべては常に関係なく、JSONの値が何であるかをfalseに設定されていないboolean型のプロパティを除いて正常に動作します。私はJSON入力フォーマッタを持っています。このフォーマッタは、パラメータ内のインスタンスを構築します。私はインスタンスのタイプをチェックし、それらがNewtonsoft.Json.Linq.JObjectであることを発見しました

どのように私は正しく動作するようにboolsを得ることができますか?

TDestination IMapper.Map<TDestination>(object source)hereを参照)を使用して、任意の数の宛先クラスのマッピングをサポートしていきたいと思いますが、それぞれに対してAutoMapperマップを明示的に構築する必要はありません。どのようにこれを達成することができますか?

P.S.私はAutoMapper 6.2.1とASP.NET Core 1.1.3を使用しています

+0

これはExpandoObjectなどで動作します。したがって、モデルがどのように組み合わされるかという問題です。 –

+0

JSON入力フォーマッタは、ダイナミックパラメータモデル – Bahaa

+0

の中にNewtonsoft.Json.Linq.JObjectインスタンスをパックします。それで、調査する必要があります。 AMに関する限り、それは機能します。 –

答えて

1

問題は、JObjectがJValue-sでコンテンツをラップするので、もちろん実際の値を期待しているAMではデフォルトでは動作しません。したがって、AMにJValueのマッピング方法を知らせなければなりません。

cfg.CreateMap<JValue, object>().ConvertUsing(s=>s.Value); 
+0

それはそれでした!ありがとう。これはAutoMapperマッピングプロファイルにこのコンバータ設定を追加した後に機能しました – Bahaa

関連する問題