使用Automapper 3.0将空字符串转换为可空类型转换?

时间:2013-11-04 16:20:07

标签: c# automapper

我正在尝试将字符串的源对象上的属性转换为可以为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);

2 个答案:

答案 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;
        }
    }
}