代码之家  ›  专栏  ›  技术社区  ›  punkouter

为什么我的wcf服务返回和数组而不是列表?

  •  12
  • punkouter  · 技术社区  · 15 年前

    在网络服务中我说

     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 回复  |  直到 15 年前
        1
  •  28
  •   Greg Levenhagen    15 年前

    右键单击服务引用并选择配置服务引用。

    在“集合类型”下拉列表中,选择类型system.collections.generic.list。

    我相信它默认为array的原因是它在序列化时是最兼容的。如果您使用的服务来自识别更复杂的内容的内容,则可以按我所述进行配置。

        2
  •  4
  •   Bryan Denny    15 年前

    右键单击“数据类型”下的“收集类型”更改为 System.Collections.ArrayList 或者您希望数组反序列化为的任何类型。

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

        3
  •  2
  •   Shafique    15 年前

    我的设置为system.collections.generic.list,但突然当我执行更新服务引用时,生成的代理返回数组类型!怎么了?

        4
  •  1
  •   David M    15 年前

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