我有一个自定义的分页泛型集合类,代码如下:
[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等,请问
这个怎么解决呢?
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接口来实现