0

我正在尝试将字符串源对象的属性转换为可为空数据类型的目标对象属性(int?,bool?,DateTime?)。我的源上的字符串类型的属性可以为空,当它们为空时,应将等效的 null 映射到目标属性。当属性具有值但为空时它可以正常工作它会引发异常 {“字符串未被识别为有效布尔值。"}

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

2 回答 2

1

实际上,我的问题中的代码运行良好。这是我的属性之一,它是 bool 而不是 bool?对此我深表歉意,并感谢大家的参与。

于 2013-11-05T14:02:28.093 回答
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;
        }
    }
}
于 2013-11-04T16:54:35.943 回答