2017-07-21 18 views
0

タイプlongをタイプDateTimeにマップすることは可能ですか?私は別のフィールドを持つ2つのクラスを持っている:Automapper- map to long to DateTime c#

ファーストクラス:

public class Task 
{  
    public int id_task { get; set; }  
    public string state{ get; set; }  
    public long date_prev { get; set; }  
    public long date_last { get; set; } 
} 

セカンドクラス:

私は2番目のクラスに最初のクラスをマッピングしたい
public class TaskDTO 
{  
    public int id_task { get; set; }  
    public string state{ get; set; }  
    public DateTime date_prev { get; set; }  
    public DateTime date_last { get; set; } 
} 

public HttpResponseMessage PostTask(Task task) 
{ 
    Mapper.Initialize(cfg => 
    { 
     cfg.CreateMap<long, DateTime>().ConvertUsing(new DateTimeTypeConverter()); 
     cfg.CreateMap<Task, TaskDTO>() 
      .ForMember(dest => dest.date_prev, opt => opt.MapFrom(src => new DateTime(task.date_prev))); 
    }); 

    TaskDTO taskDTO = Mapper.Map<Task,TaskDTO>(task); 

    /*...*/ 
} 

しかし、私のアプリケーションを実行すると、私はAutoMapperのエラーを受け取る:

"ExceptionMessage":、 "ExceptionType" " '日時' から 'Int64型' からの変換が有効ではありません。": "System.InvalidCastExceptionの"、

任意のアイデア?どうもありがとう!

+1

あなたのapiが起動したときに、毎回あなたのマッパーを初期化する必要があります。 – Jamiec

+0

うん、わかっている。しかし、私はちょうどオートマトンを追加しようとしています、これは最終バージョンではありません:) – Aw3same

+0

https://github.com/AutoMapper/AutoMapper/wiki/Custom-type-convertersで何が問題なのですこれは最初のことですオートマトンのタイプを入力するときにGoogleで見つける... –

答えて

1

マッピングlong定義 - カスタムITypeConverterを使用しています>DateTimeを(あなたがすでに行ったように):

public class TicksToDateTimeConverter: ITypeConverter<long, DateTime> { 
    public string Convert(long source, DateTime destination, ResolutionContext context) { 
     return new DateTime(source); // interpret long as Ticks 
    } 
} 

CreateMap<long, DateTime>().ConvertUsing<TicksToDateTimeConverter>(); 

ソースがlongで、宛先がDateTimeある場合AutoMapperは自動的にこのルールを適用することに注意してください、そうマッピングをTaskDTOの場合は

CreateMap<Task, TaskDTO>() 
     .ForMember(dest => dest.date_prev, opt => opt.MapFrom(src => src.date_prev));