AutoMapper自定义类型转换器不工作(AutoMapper Custom Type Conve

2019-07-31 16:26发布

我使用的特洛伊古德的PagedList提供在我的WebAPI寻呼信息。 他的包返回实现IEnumerable一个IPagedList而且还含有如IsLastPage,的PageNumber,页页次等自定义属性

当您尝试从一个的WebAPI控制器方法(如GET)返回这个类,可枚举序列化,但自定义属性都没有。 所以,我想我会用AutoMapper和编写自定义类型转换器转换为一类像这样:

public class PagedViewModel<T>
{
    public int FirstItemOnPage { get; set; }
    public bool HasNextPage { get; set; }
    public bool HasPreviousPage { get; set; }
    public bool IsFirstPage { get; set; }
    public bool IsLastPage { get; set; }
    public int LastItemOnPage { get; set; }
    public int PageCount { get; set; }
    public int PageNumber { get; set; }
    public int PageSize { get; set; }
    public int TotalItemCount { get; set; }
    public IEnumerable<T> rows { get; set; }
}

因为我移动可枚举到一个不同的属性,系列化完美地处理它。 所以,我坐下来,写了一个自定义类型转换是这样的:

public class PagedListTypeConverter<T> : ITypeConverter<IPagedList<T>, PagedViewModel<T>>
{
    public PagedViewModel<T> Convert(ResolutionContext context)
    {
        var source = (IPagedList<T>)context.SourceValue;
        return new PagedViewModel<T>()
        {
            FirstItemOnPage = source.FirstItemOnPage,
            HasNextPage = source.HasNextPage,
            HasPreviousPage = source.HasPreviousPage,
            IsFirstPage = source.IsFirstPage,
            IsLastPage = source.IsLastPage,
            LastItemOnPage = source.LastItemOnPage,
            PageCount = source.PageCount,
            PageNumber = source.PageNumber,
            PageSize = source.PageSize,
            TotalItemCount = source.TotalItemCount,
            rows = source
        };
    }
}

然后把它架在我的配置是这样的:

Mapper.CreateMap<IPagedList<Department>, PagedViewModel<Department>>().ConvertUsing(new PagedListTypeConverter<Department>());

但是,当我尝试这样称呼它:

var x = Mapper.Map<IPagedList<Department>, PagedViewModel<Department>>(departments);

我得到这个错误:

缺少类型映射配置或不支持的映射。

映射类型:IPagedList 1 -> PagedViewModel 1 PagedList.IPagedList 1[[Provision.DomainObjects.Department, Provision.DomainObjects, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] -> Provision.DomainObjects.PagedViewModel 1 [[ Provision.DomainObjects.Department,Provision.DomainObjects,版本= 1.0.0.0,文化=中立,公钥=空]

目标路径:PagedViewModel`1

源值:PagedList.StaticPagedList`1 [Provision.DomainObjects.Department]

我怎样才能使这项工作?

Answer 1:

拉我的头发后,我终于想通这一个。 没有任何东西错误的代码。 它原来是一个线程问题,即配置的映射都拿到清理出去。 上面的代码是做什么我想要的正确方法。 我离开这里,这样我可以指向另一个问题是为别人谁需要做同样的事情。



文章来源: AutoMapper Custom Type Converter not working