Troy Goode's PagedListを使用して、WebApiにページング情報を提供しています。彼のパッケージはIEnumerableを実装するIPagedListを返しますが、IsLastPage、PageNumber、PageCountなどのカスタムプロパティも含みます。AutoMapperカスタムタイプコンバータが動作しない
このクラスをWebApiコントローラメソッド(GETなど)から返すと、Enumerableはシリアル化されますカスタムプロパティはそうではありません。私は個別のプロパティに列挙を移動するので、シリアライズは完全にそれを扱う
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; }
}
:だから、私はこのようなクラスに変換するにはAutoMapperを使用して、カスタム型コンバータを書くだろうと思いました。私はこのようにそれを呼び出すようにしようとすると、
Mapper.CreateMap<IPagedList<Department>, PagedViewModel<Department>>().ConvertUsing(new PagedListTypeConverter<Department>());
しかし:だから、私は座って、このようなカスタム型コンバータを書いた:
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
};
}
}
そして、このように私の設定でそれを設定します。
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
私は覚えていればいいと思うが、1年後には手がかりがない。しかし、私がやったことは本当にばかげていることを覚えています。だからあなたはそれにぶつかるのではないかと思います。 –