WCF怎么传递自定义分页泛型集合类?

我有一个自定义的分页泛型集合类,代码如下:

 

    [CollectionDataContract]
    [Serializable]
    public class PageOfItems<T> : Collection<T>
    {
        public PageOfItems()
        { }



        /// <summary>
        /// 当前页码
        /// </summary>
        [DataMember]
        public int PageIndex { get; set; }

        /// <summary>
        /// 页面尺寸
        /// </summary>
        [DataMember]
        public int PageSize { get; set; }

        /// <summary>
        /// 总记录数
        /// </summary>
        [DataMember]
        public int TotalItemCount { get; set; }

        /// <summary>
        /// 总页数
        /// </summary>
        [DataMember]
        public int TotalPageCount { get; set; }

        /// <summary>
        /// 是否有上一页
        /// </summary>
        [DataMember]
        public bool IsPreviousPage
        {
            get;
            set;
        }

        /// <summary>
        /// 是否有下一页
        /// </summary>
        [DataMember]
        public bool IsNextPage
        {
            get;
            set;
        }

    }

 

集合本身的数据可以传递,但是其他标记有DataMember的属性却传递不了,比如TotalItemCount,TotalPageCount等,请问

这个怎么解决呢?

  • star65225692 - 1年前

    WCF里标记为CollectionDataContract的类就不能使用DataMember了,是无效的,你这个自定义泛型集合,可以这么写:

        [DataContract]
        public class PageOfItems<T> : ICollection<T>
        {
            public PageOfItems()
            {
                Data = new List<T>();
    
            }
    
            [DataMember]
            public List<T> Data { get; set; }
    
            /// <summary>
            /// 当前页码
            /// </summary>
            [DataMember]
            public int PageIndex { get; set; }
    
            /// <summary>
            /// 页面尺寸
            /// </summary>
            [DataMember]
            public int PageSize { get; set; }
    
            /// <summary>
            /// 总记录数
            /// </summary>
            [DataMember]
            public int TotalItemCount { get; set; }
    
            /// <summary>
            /// 总页数
            /// </summary>
            [DataMember]
            public int TotalPageCount { get; set; }
    
            /// <summary>
            /// 是否有上一页
            /// </summary>
            [DataMember]
            public bool IsPreviousPage
            {
                get;
                set;
            }
    
            /// <summary>
            /// 是否有下一页
            /// </summary>
            [DataMember]
            public bool IsNextPage
            {
                get;
                set;
            }
    
    
            #region ICollection<T> Members
    
            public void Add(T item)
            {
                Data.Add(item);
            }
    
            public void Clear()
            {
                Data.Clear();
            }
    
            public bool Contains(T item)
            {
                return Data.Contains(item);
            }
    
            public void CopyTo(T[] array, int arrayIndex)
            {
                Data.CopyTo(array, arrayIndex);
            }
    
            public int Count
            {
                get { return Data.Count; }
            }
    
            public bool IsReadOnly
            {
                get { return false; }
            }
    
            public bool Remove(T item)
            {
                return Data.Remove(item);
            }
    
            #endregion
    
            #region IEnumerable<T> Members
    
            public IEnumerator<T> GetEnumerator()
            {
                return Data.GetEnumerator();
            }
    
            #endregion
    
            #region IEnumerable Members
    
            System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
            {
                return Data.GetEnumerator();
            }
    
            #endregion
        }
    通过继承ICollection接口来实现