【问题标题】:Why does my WCF service return and ARRAY instead of a List <T>?为什么我的 WCF 服务返回和 ARRAY 而不是 List <T>?
【发布时间】:2011-02-01 07:11:09
【问题描述】:

在网络服务中我说

 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();
    }

为什么是数组?我要了一份清单。

帮助。

【问题讨论】:

    标签: asp.net wcf generics


    【解决方案1】:

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

    在集合类型下拉列表中,选择 System.Collections.Generic.List 类型。

    我相信它默认为 Array 的原因是它在序列化时是最兼容的。如果您从识别更复杂事物的事物中使用服务,则可以按照我提到的方式进行配置。

    【讨论】:

    • 有趣。当使用 silverlight 而不是 ASP.NET 时,事情是否完全相同?
    • 我不确定您所说的完全相同是什么意思,但我已经能够在 Silverlight 中完全配置这种类型的投射,而不会出现问题。默认情况下,Silverlight 会将数组转换为 ObservableCollections 以利用高级绑定功能。简而言之,我相信您正在寻找的答案是,是的!
    【解决方案2】:

    右键单击您的服务引用 --> 配置服务引用 --> 在“数据类型”下将“集合类型”更改为 System.Collections.ArrayList 或您希望数组反序列化为的任何类型。

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-04
        • 1970-01-01
        • 2011-07-03
        • 2013-05-15
        • 2011-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多