0

2 つのオブジェクトのマッピングに Automapper を使用しています。

目的地にデフォルト値を持つフィールド VehicleModel があります。ソースにこの宛先フィールドのマッピングがありません。だから地図にしなかった。マッピングが完了すると、私のデフォルト値は宛先で null 値に設定されます。データ オブジェクトは次のようになります。

public partial class Source
{

private Car[] cars;

public Car[] Cars
{
    get { return this.cars; }
    set { this.cars = value; }
}
}

public partial class Destination
{
private OutputData output;

public OutputData Output
{            
    get {  return this.output; }
    set {  this.output= value; }
}   
}

public class OutputData
{
private List<Cars> cars;
private string vehicleModel;

public Car[] Cars
{
    get { return this.cars; }
    set { this.cars = value; }
}
public string VehicleModel
{            
    get {  return this.vehicleModel; }
    set {  this.vehicleModel= value; }
}
}    

Source と OutputData の間のマッピング。

Mapper.CreateMap<Source, OutputData>();
Mapper.CreateMap<Source, Destination>().ForMember( dest => dest.Output, input => 
    input.MapFrom(s=>Mapper.Map<Source, OutputData>(s))); 

この動作を回避する方法。

前もって感謝します。サンディープ

4

1 に答える 1

1

コンパイルできるようにコードを修正しました。何かが間違っている場合は修正します。

public class Car
{
    public string Brand {get;set;}
}

public partial class Source
{
    private Car[] cars;

    public Car[] Cars
    {
        get { return this.cars; }
        set { this.cars = value; }
    }
}

public partial class Destination
{
    private OutputData output;

    public OutputData Output
    {            
        get {  return this.output; }
        set {  this.output= value; }
    }   
}

public class OutputData
{
    private List<Car> cars;
    private string vehicleModel = "DEFAULTMODEL";

    public Car[] Cars
    {
        get { return cars.ToArray(); }
        set { this.cars = value.ToList(); }
    }
    public string VehicleModel
    {            
        get {  return this.vehicleModel; }
        set {  this.vehicleModel= value; }
    }
}    

注: デフォルトのモデルを追加しました。

構成と上記のコードを使用すると、次のマッピングが期待どおりに機能します。

var res = Mapper.Map<Source, Destination>(new Source { Cars = new Car[]{ new Car{ Brand = "BMW" }}});

重要なコードが提供されていないようです。

于 2012-07-27T23:55:28.813 に答える