AutoMapper:给定类型的IValueFormatter的广泛使用

这是我的理解,我可以用以下方式配置AutoMapper,在映射期间,它应该将所有源模型日期格式化为IValueFormatter中定义的规则,并将结果设置为映射模型。

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

这对我的映射类没有任何效果。 它只适用于我做以下事情:

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

我正在映射DateTime? Member.DateOfBirth字符串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();
    }
}

我遇到了同样的问题,并找到了解决办法。 尝试改变:

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

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

仅供参考 - 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();
    }
}

我正在使用AutoMapper v1。

那里有一个抽象类,它可以完成大多数叫做ValueFormatter的繁琐工作。

我的代码:

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

然后在我的Profile类中:

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));

}

链接地址: http://www.djcxy.com/p/37407.html

上一篇: AutoMapper : Site wide usage of IValueFormatter for given types

下一篇: AutoMapping Object with Constructor Arguments