2011-02-07 64 views
1

我们一直在与各种版本的PagedList,但是这些pagedlists不友善。他们不序列化。有没有人有一个很好的方式来获取跨Wcf的分页数据? (包括诸如数据源的TotalRecords之类的属性。)Wcf友好的PagedList

回答

1

我们制定了一个解决方案,将当前的PagedList简化为更可序列化并更适合我们解决方案的东西。我们创建了一个包含列表/集合的类,而不是创建自定义List/Collection。

以前,我们在客户端反序列化时丢失了pagedlist的自定义属性。它仍然包含列表中的所有项目,但它缺少属性。

这是基于特洛伊古德的代码,我相信它是基于一些未发布的Microsoft MVC代码。更多信息可以在这里找到:http://www.squaredroot.com/2009/06/15/return-of-the-pagedlist/

public class PagedList<T> : IPagedList<T> 
    { 
     public PagedList() 
     { 
     } 

     public PagedList(IEnumerable<T> source, int pageIndex, int pageSize) 
      : this(source == null ? new List<T>().AsQueryable() : source.AsQueryable(), pageIndex, pageSize) 
     { 
     } 

     private PagedList(IQueryable<T> source, int pageIndex, int pageSize)    
     { 
      TotalRecords = source.Count(); 

      // add items to internal list 
      if (TotalRecords > 0) 
       if (pageIndex == 0) 
        Data = source.Take(pageSize).ToList(); 
       else 
        Data = source.Skip((pageIndex) * pageSize).Take(pageSize).ToList(); 
     } 

     public int TotalRecords { get; set; } 

     public IEnumerable<T> Data { get; set; } 
    } 

,然后通过下面的扩展的实际执行:

public static PagedList<T> ToPagedList<T>(this IEnumerable<T> source, int pageIndex, int pageSize) 
{ 
    return new PagedList<T>(source, pageIndex, pageSize); 
} 
+0

我一直在试图使用的代码在你的解决方案,从序列化IPagedList结果我客户端上的WCF服务,但没有成功,你能帮我解决吗?我不确定它是否适合我创建一个新问题来深入解释问题。 – 2013-02-06 09:04:19