2010-05-06 24 views
1

我的理解是我可以通過以下方式配置AutoMapper,並且在映射過程中,它應該將所有源模型日期格式化爲IValueFormatter中定義的規則,並將結果設置爲映射模型。AutoMapper:對於給定類型的網站廣泛使用IValueFormatter

ForSourceType<DateTime>().AddFormatter<StandardDateFormatter>(); 
ForSourceType<DateTime?>().AddFormatter<StandardDateFormatter>(); 

我對此類映射類沒有任何效果。

Mapper.CreateMap<Member, MemberForm>().ForMember(x => x.DateOfBirth, y => y.AddFormatter<StandardDateFormatter>()); 

我映射日期時間:當我做了以下它只適用? Member.DateOfBirthstring MemberForm.DateOfBirth。格式化程序基本上從日期創建一個短日期字符串。

設置給定類型的默認格式化程序時是否存在缺少的內容?

感謝

public class StandardDateFormatter : IValueFormatter 
{ 
    public string FormatValue(ResolutionContext context) 
    { 
     if (context.SourceValue == null) 
      return null; 

     if (!(context.SourceValue is DateTime)) 
      return context.SourceValue.ToNullSafeString(); 

     return ((DateTime)context.SourceValue).ToShortDateString(); 
    } 
} 

回答

5

我有同樣的問題,並找到了解決。嘗試改變:

ForSourceType<DateTime>().AddFormatter<StandardDateFormatter>(); 

Mapper.ForSourceType<DateTime>().AddFormatter<StandardDateFormatter>(); 
1

我使用AutoMapper V1。

那裏有一個抽象類,它可以完成大多數叫做ValueFormatter的咕嚕作品。

我的代碼:

public class DateStringFormatter : ValueFormatter<DateTime> 
{ 
    protected override string FormatValueCore(DateTime value) 
    { 
     return value.ToString("dd MMM yyyy"); 
    } 
} 

然後在我的檔案類:

public sealed class ViewModelMapperProfile : Profile 
{ 
    ... 

    protected override void Configure() 
    { 
     ForSourceType<DateTime>().AddFormatter<DateStringFormatter>(); 

     CreateMap<dto, viewModel>() 
      .ForMember(dto => dto.DateSomething, opt => opt.MapFrom(src => src.DateFormatted)); 

}

+0

感謝您的幫助。我嘗試了這些例子,但仍然沒有運氣。我將繼續爲每個字段添加格式化程序。 – CRice 2010-05-14 04:48:43

2

僅供參考 - AddFormatter方法已過時,在3.0版本。您可以使用ConvertUsing代替:

Mapper.CreateMap<DateTime, string>() 
    .ConvertUsing<DateTimeCustomConverter>(); 

public class DateTimeCustomConverter : ITypeConverter<DateTime, string> 
{ 
    public string Convert(ResolutionContext context) 
    { 
     if (context.SourceValue == null) 
      return null; 
     if (!(context.SourceValue is DateTime)) 
      return context.SourceValue.ToNullSafeString(); 
     return ((DateTime)context.SourceValue).ToShortDateString(); 
    } 
}