Troy GoodeのPagedListを使用して、WebApiでページング情報を提供しています。彼のパッケージは、IEnumerableを実装するIPagedListを返しますが、IsLastPage、PageNumber、PageCountなどのカスタムプロパティも含みます。
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; }
}
Enumerableを個別のプロパティに移動するので、シリアル化はそれを完全に処理します。それで、私は座って、次のようなカスタムタイプコンバーターを作成しました。
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.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]]宛先パス:PagedViewModel`1
ソース値:PagedList.StaticPagedList`1 [Provision.DomainObjects.Department]
どうすればこれを機能させることができますか?