我使用Troy Goode's PagedList在我的WebApi中提供分頁信息。他的程序包返回實現IEnumerable的IPagedList,但也包含自定義屬性,如IsLastPage,PageNumber,PageCount等。AutoMapper自定義類型轉換器不工作
當您試圖從WebApi控制器方法(如GET)返回此類時,Enumerable被序列化,但是自定義屬性不是。所以,我想我會用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);
我得到這個錯誤:
Missing type map configuration or unsupported mapping.
Mapping types: IPagedList
1 -> PagedViewModel
1 PagedList.IPagedList1[[Provision.DomainObjects.Department, Provision.DomainObjects, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] -> Provision.DomainObjects.PagedViewModel
1[[Provision.DomainObjects.Department, Provision.DomainObjects, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]Destination path: PagedViewModel`1
Source value: PagedList.StaticPagedList`1[Provision.DomainObjects.Department]
我該如何做這項工作?
不錯的工作布萊恩。你能告訴我更多關於你遇到的線程問題嗎?我使用的代碼,並希望確保我可以解決可能出現的任何問題。 – maguy
我希望我能記住,但過了一年,我不知道。不過,我確實記得,這是我做過的非常愚蠢的事情,所以我懷疑你會遇到它。 –