我正在尝试将字符串的源对象上的属性转换为可以为null的数据类型的目标对象属性(int?,bool?,DateTime?)。我的源上的字符串类型的属性可以为空,当它们为空时,应该在目标属性上映射等效的null。当属性有值但是它为空时它工作正常 它抛出一个异常{“String未被识别为有效的布尔值。”}
public class SourceTestString
{
public string IsEmptyString {get; set;}
}
public class DestinationTestBool
{
public bool? IsEmptyString {get; set;}
}
我的转换器类
public class StringToNullableBooleanConverter : ITypeConverter<string,bool?>
{
public bool? Convert(ResolutionContext context)
{
if(String.IsNullOrEmpty(System.Convert.ToString(context.SourceValue)) || String.IsNullOrWhiteSpace(System.Convert.ToString(context.SourceValue)))
{
return default(bool?);
}
else
{
return bool.Parse(context.SourceValue.ToString());
}
}
}
创建地图
AutoMapper.Mapper.CreateMap<string,bool?>().ConvertUsing(new StringToNullableBooleanConverter());
地图方法
SourceTestString source = SourceTestString();
source.IsEmptyString = "";
var destination = Mapper.Map<SourceTestString,DestinationTestBool>(source);
答案 0 :(得分:1)
实际上,我的问题中的守则完美无缺。这是我的一个属性是bool而不是bool?我为此道歉,并感谢所有人参与。
答案 1 :(得分:0)
试试这个:
public class StringToNullableBooleanConverter :
ITypeConverter<string, bool?>
{
public bool? Convert(ResolutionContext context)
{
if (String.IsNullOrEmpty(System.Convert.ToString(context.SourceValue))
|| String.IsNullOrWhiteSpace(System.Convert.ToString(context.SourceValue)))
{
return default(bool?);
}
else
{
bool? boolValue=null;
bool evalBool;
if (bool.TryParse(context.SourceValue.ToString(), out evalBool))
{
boolValue = evalBool;
}
return boolValue;
}
}
}