我正在研究MVC 4项目,并尝试将KeyValue列表中的值转换为可为空的DateTime。我在mapper中使用了以下行(我没有包括其他属性,因为有很多)
.ForMember(d => d.Deadline, m => m.ResolveUsing<DeadlineResolver>())
我的解析器看起来像这样:
public class DeadlineResolver : ValueResolver<Booking, DateTime?>
{
protected override DateTime? ResolveCore(Booking source, ResolutionResult resolutionResult)
{
KeyValue keyValue = source.KeyValues.FirstOrDefault(k => k.Key.KeyId == "DEADLINE");
return (keyValue != null) ? DateTime.Parse(keyValue.Value) : (DateTime?)null;
}
}
如下所示定义的截止日期的值永远不会返回null,而是返回DateTime.MinDate。当我在一个视图中绑定结果时,我需要它为null,这样我只在有日期时显示一个值。
public DateTime? Deadline { get; set; }
如何在映射到查找最小日期并设置为null之后将这些值设为null而不检查值(我已经实施了临时工具以便代码运行)?
答案 0 :(得分:0)
使用LinqPad和AutoMapper 2.2.1,以下为KeyValue
有约会时的有效日期,以及null
为DateTime
时的KeyValue
null
}。 (注意,由于未提供类定义,因此对解析器进行了少量更改以简化它。)
void Main()
{
AutoMapper.Mapper.CreateMap<Booking, dest>()
.ForMember(d => d.Deadline, m => m.ResolveUsing<DeadlineResolver>());
AutoMapper.Mapper.AssertConfigurationIsValid();
// Gives a valid DateTime
var booking = new Booking { KeyValue = "2013-01-01" };
booking.Dump();
var rc = AutoMapper.Mapper.Map<Booking, dest>(booking);
rc.Dump();
// Gives a null DateTime
booking = new Booking { KeyValue = null };
booking.Dump();
rc = AutoMapper.Mapper.Map<Booking, dest>(booking);
rc.Dump();
}
// Define other methods and classes here
public class Booking
{
public string KeyValue { get; set; }
}
public class dest
{
public DateTime? Deadline { get; set; }
}
public class DeadlineResolver : AutoMapper.ValueResolver<Booking, DateTime?>
{
protected override DateTime? ResolveCore(Booking source)
{
return (source.KeyValue != null)
? DateTime.Parse(source.KeyValue)
: (DateTime?)null;
}
}
这是你追求的功能吗?如果是这样,那么问题可能出在AutoMapper的旧版本或意外的KeyValue
值。