使用IEGumerable <T>使用WebGet序列化数据

Jim*_*Jim 3 ienumerable serialization webget

可能重复:
当使用WCF,LINQ,JSON时,无法序列化'System.Linq.Enumerable ...'类型的参数


嗨,

如果我的方法signiature看起来像这样,它工作正常.

[WebGet]
MyClass[] WebMethod()
Run Code Online (Sandbox Code Playgroud)

如果签名看起来像这样

[WebGet]
IEnumerable<T> WebMethod()
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:无法序列化'XYZT + <WebMethod> d__2c'类型的参数(对于操作'WebMethod',合同'IService'),因为它不是确切的类型'System.Collections.Generic.IEnumerable`1 [XYZT] '在方法签名中并且不在已知类型集合中.要序列化参数,请使用ServiceKnownTypeAttribute将类型添加到操作的已知类型集合中.

我试过添加.ServiceKnownType(typeof运算(IEnumerable的))

同样的错误.

这是2010 beta 2中的错误,或者这可能是正确的吗?

谢谢

SLa*_*aks 7

由C#编译器生成的迭代器类型不可序列化,永远不会.

如果您阅读此页面,您将看到序列化迭代器没有意义.

你需要返回一个数组.

编辑:最简单的方法是将迭代器移动到单独的方法,然后更改WebMethod

[WebGet]
MyClass[] WebMethod() { return OtherMethod().ToArray(); }
Run Code Online (Sandbox Code Playgroud)