我使用 ScriptServices 返回 IPaged<> 结果:
[WebService]
public IPaged<int> DoSomething() {
....
....
}
IPaged<> 是:
public interface IPaged<T> : IEnumerable where T : class
{
int PageNumber { get; }
int PageSize { get; }
IEnumerable<T> Items { get; }
int PagesCount { get; }
int TotalItemsCount { get; }
}
从 DoSomething 返回的 Paged<> 类实现了 IPaged<>,因此实现了 IEnumerator GetEnumerator()
:
public IEnumerator GetEnumerator()
{
return ((IEnumerable)Items).GetEnumerator();
}
每当我从 Javascript ajax 调用 DoSomething 时,脚本服务引擎返回 IEnumerable 实例而不是 IPaged,因此我得到一个数组(来自 GetEnumerator() 方法的 Items 成员)。
如何从脚本服务返回 IPaged<> 而不是 IEnumerable<>?
最佳答案
有点猜测,但对于 IEnumerable[<T>]
这非常常见(有时 IList[<T>]
优先于其他任何事情,并跳入“集合”分支(忽略“容器”上定义的任何属性)。
因此,我希望您最好的选择是没有 IPaged<T>
实现 IEnumerable<T>
.
这可能意味着必须更改一些地方以添加 .Items
.
另一种方法是添加 ForJson()
返回类似于 IPaged<T>
的内容的扩展方法。 , 但没有实现 IEnumerable[<T>]
.
关于c# - 返回值是 IEnumerable 而不是 IPaged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7378068/