为什么我的WCF服务返回和ARRAY而不是List <t>?</t>

时间:2010-03-26 17:43:58

标签: asp.net wcf generics

在网络服务中我说

 public List<Customer> GetCustomers()
    {
        PR1Entities dc = new PR1Entities();
        var q = (from x in dc.Customers
                select x).ToList();
        return q;
    }

(客户是实体对象)

然后我在添加服务时生成代理..在reference.cd中它说

public wcf1.ServiceReference1.Customer[] GetCustomers() {
        return base.Channel.GetCustomers();
    }

为什么是阵列?我要了一份清单。

帮助。

4 个答案:

答案 0 :(得分:28)

右键单击服务引用,然后选择“配置服务引用”。

在Collection Type下拉列表中,选择System.Collections.Generic.List。

类型

我认为默认为Array的原因是它在序列化时最兼容。如果您从识别更复杂的东西中获取服务,则可以按照我的提法进行配置。

答案 1 :(得分:4)

右键点击您的服务参考 - &gt;配置服务参考 - &gt;在“数据类型”下,将“集合类型”更改为System.Collections.ArrayList或您希望数组反序列化为的任何类型。

您的列表被序列化为一个数组(服务器端)。您可以选择如何反序列化(客户端)。

答案 2 :(得分:2)

我已将我的设置设置为System.Collections.Generic.List,但是当我执行更新服务参考时,我生成的代理突然返回数组类型!怎么了?

答案 3 :(得分:1)

因为这就是列表序列化的方式。客户端的Customer类是从服务元数据生成的,它有效地描述了它的序列化方式,而不是最初定义的方式。如果您的原始Customer类可用,则可以指定在生成服务引用时在客户端代码中重复使用它,然后它将作为List<T>进行。