2017-12-30 31 views
1

私はasp.netコア2.0プロジェクトでAutomapper(DI経由)を使用しています。文字列変換のAutomapper日付が正しく動作しない

私のビューモデルにはエンティティモデルのDateTimeプロパティにマップする文字列のdateプロパティがあります。

文字列のグローバルマッピングプロファイルをDateTimeに指定したくないので、プロパティごとに指定します。

これが私のマッピングプロファイルです:

CreateMap<JobDetailViewModel, JobDetail>() 
      .ForMember(x => x.StartDate, opt => opt.MapFrom(s => Convert.ToDateTime(s.StartDate))) 
      .ForMember(x => x.EndDate, opt => opt.MapFrom(s => Convert.ToDateTime(s.EndDate))); 

これは例外を生成します。

文字列は有効な日時として認識されませんでした。

私はカットしConvert.ToDateTime(dateString)を実行しているコンソールアプリに自分の正確な文字列を貼り付け、それが正常に動作しているので、私はこれは私がマッピングを定義した方法をwhith問題でなければならないと思います。

私も試してみました:

CreateMap<JobDetailViewModel, JobDetail>() 
      .ForMember(x => x.StartDate, opt => opt.ResolveUsing(s => { return Convert.ToDateTime(s.StartDate); })) 
      .ForMember(x => x.EndDate, opt => opt.ResolveUsing(s => { return Convert.ToDateTime(s.EndDate); })); 

をしかし、それは全く動作しませんでした。

私には何が欠けていますか?

答えて

0

私はあなたの機能を模倣し、それは私の作品の小さなサンプルをビルドしてみました:私はあなたが言及した例外を取得するための

class Source 
{ 
    public string Foo { get; set; } 
} 

class Dest 
{ 
    public DateTime Bar { get; set; } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     Mapper.Initialize(cfg => 
     { 
      cfg.CreateMap<Source, Dest>().ForMember(d => d.Bar, opt => opt.MapFrom(s => Convert.ToDateTime(s.Foo))); 
     }); 

     var src = new Source { Foo = "01/01/2017" }; 
     var dst = Mapper.Map<Dest>(src); 
     Console.WriteLine(dst.Bar); 
    } 
} 

唯一の方法は、実際に入れて悪い日付フォーマットである(例えば、日付を最初に米国のロケールに)文字列に:

var src = new Source { Foo = "30.01.2017" }; // European date format, will fail 

だから私は例えば、あなたが渡しているとあなたがDateTime.ParseExacthttps://msdn.microsoft.com/en-us/library/w2sa9yss(v=vs.110).aspx)を使用し、正確な文字列を渡していることを修正することができます正確に何をデバッグします:

cfg.CreateMap<Source, Dest>().ForMember(d => d.Bar, opt => opt.MapFrom(s => DateTime.ParseExact(s.Foo, "dd.mm.yyyy", CultureInfo.InvariantCulture))); 

メソッドに複数の形式を渡すことができます。

+0

米国のプロダクションサーバーをコーディングしていますが、私のローカルヨーロッパの設定が使用されていたと思います。 ParseExact()は適切な解決策です。どうもありがとうございました – Guerrilla

関連する問題