Преобразователь типов Automapper из строки в IEnumerable <String>не вызывается - PullRequest
0 голосов
/ 01 апреля 2010

Вот мой пользовательский конвертер типов.

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

Ответы [ 2 ]

1 голос
/ 12 июля 2010

Проверено, что все отлично работает для Automapper 1.1 RTW

1 голос
/ 03 апреля 2010

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

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
}

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

...