2013-11-04 54 views
0

我試圖將字符串的源對象的屬性轉換爲可爲空數據類型的目標對象屬性(int?,bool?,DateTime?)。我的源文件中的字符串類型的屬性可以爲空,當它們爲空時,等效的空值應該映射到目標屬性上。當屬性有值但空時,它可以正常工作 它引發異常{「字符串未被識別爲有效的布爾。「}使用Automapper 3.0進行可空類型轉換的空字符串?

public class SourceTestString 
{ 
    public string IsEmptyString {get; set;} 
} 

public class DestinationTestBool 
{ 
    public bool? IsEmptyString {get; set;} 
} 

我Converter類

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

'IsNullOrWhiteSpace'也適用於空值 - 您不應該同時需要這兩項檢查。 –

+0

感謝您的建議我會採取它,但它不能解決我的問題,但:( – Mady

+0

它適用於我的工作正常。你使用什麼版本的AutoMapper? – Mightymuke

回答

1

實際上,該代碼在我的問題完美的工作。這是我bool而不是bool的屬性之一?我對此表示歉意,並感謝所有人的參與。

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; 
     } 
    } 
} 
+0

我試過類似的東西仍然不工作。bool boolValue = false; return bool.TryParse(context.SourceValue.ToString(),out boolValue) ?boolValue:default(bool?); – Mady

+0

謝謝你的時間。 – Mady