2010-04-01 2 views
0

Вот мой пользовательский конвертер типов.Конвертер типа Automapper из строки в IEnumerable <String> не называется

public class StringListTypeConverter : TypeConverter<String, IEnumerable<String>> 
{ 
    protected override IEnumerable<string> ConvertCore(String source) 
    { 
     if (source == null) 
      yield break; 

     foreach (var item in source.Split(',')) 
      yield return item.Trim(); 
    } 
} 

public class Source 
{ 
    public String Some {get;set;} 
} 


public class Dest 
{ 
    public IEnumerable<String> Some {get;set;} 
} 

// ... configuration 
Mapper.CreateMap<String, IEnumerable<String>>().ConvertUsing<StringListTypeConverter>(); 
Mapper.CreateMap<Source, Dest>(); 

Проблема:StringListTypeConverterне вызывается вообще.Dest.Some == null.

Обновление: Automapper версия 1.0.0.155

+1

Это, кажется, работает нормально с кодом вы предоставили. Если я делаю Mapper.Map (новый Source {Some = "Foo, Bar, Baz"}); то значение назначения имеет свойство Some с последовательностью Foo, Bar, Baz. Это версия v1.1.0.181. –

+0

Спасибо за эту информацию. Я только что узнал, что мой код использует версию 1.0.0.155. Позвольте мне попробовать последнюю версию. –

+0

@Jimmy, BTW, где его взять? Невозможно найти его ни в кодексе, ни в google. –

ответ

1

Я не знаю, если это помогает или нет, но я просто написал подобный конвертер, смотрите ниже. Я не возражаю, признав, что операторы доходности в конвертере меня немного смущают. :)

public class CsvToStringArrayConverter: ITypeConverter<string, string[]> 
{ 
    #region Implementation of ITypeConverter<string,string[]> 

    public string[] Convert(ResolutionContext context) 
    { 
     if (context.SourceValue != null && !(context.SourceValue is string)) 
     { 
      throw new AutoMapperMappingException(context, string.Format("Value supplied is of type {0} but expected {1}.\nChange the type converter source type, or redirect the source value supplied to the value resolver using FromMember.", 
                     typeof(string), context.SourceValue.GetType())); 
     } 

     var list = new List<string>(); 
     var value = (string) context.SourceValue; 

     if(!string.IsNullOrEmpty(value)) 
      list.AddRange(value.Split(',')); 

     return list.ToArray(); 
    } 

    #endregion 
} 

Надеюсь, это поможет, извини, если я полностью неправильно понял вашу проблему!

 Смежные вопросы

  • Нет связанных вопросов^_^