WCF 正在返回 MyClass 的对象数组而不是通用列表

WCF is Returing Array of Objects of MyClass instead of Generic List

我尝试了很多来自互联网的解决方案。但是我无法解决这个问题。

我尝试了以下链接中的解决方案:

WCF Proxy Returning Array instead of List EVEN THOUGH Collection Type == Generic.List

WCF Returning Array instead of List EVEN THOUGH Collection Type == Generic.List

Why does WCF return myObject[] instead of List<T> like I was expecting?

但是我无法解决它。

我有 2 个相同的 wcf 服务源代码副本 "WCFServiceApplication"。一个托管在 LAN 上的 IIS7 上,另一个托管在我的解决方案中 运行 本地。

托管在 IIS7 上的那个工作正常并返回对象列表。但是我本地解决方案中的那个。我正在尝试在解决方案中本地引用以在名为 "MyProjectLibrary.csproj".

的本地项目之一中使用 "WCFServiceApplication" 函数

但是我遇到了问题。它没有给我自定义 class 对象的通用列表。

感谢任何帮助。

谢谢

我正在返回下面的列表 class:

[DataContract(IsReference = true)]
[KnownType(typeof(Joc))]
[KnownType(typeof(Stakeholder))]
[XmlInclude(typeof(JocStakeholder))]
public class JocStakeholder
{
    [DataMember]
    public long ID { get; set; }

    [DataMember]
    public virtual Joc joc { get; set; }

    [DataMember]
    public virtual Stakeholder stakeholder { get; set; }

}

Joc 和 Stakeholder 是另外 2 个 classes。实际上,这些是代码优先实体。

我的界面有这个功能:

[ServiceContract]
public  interface IService
{
    [OperationContract]
    public IList<JocStakeholder> GetJocStakeHolders();
}

如下更改客户端的服务引用设置

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

Data Type 属性 设置下,将 Collection Type 值从 Array 更改为

System.Collections.Generic.List

这会给你通用列表作为回应

指定 WCF 客户端的列表集合类型。默认类型是数组。

您可以在添加服务引用之前更改它,然后单击 Advance in Add Service Reference Dialog Box。在 drownlist System.Collections.Generic.List.

中集合类型 select 旁边的数据类型下

我几乎尝试了在 whosebug.com 和互联网上看到的所有方法。但是我找不到可以为我完成这项工作的人。

所以,最后,我找到了这篇文章 WCF the Right Wat by Miguel Castro 并且我使用与 Miguel Sir 相同架构的服务来实现。该架构解决了这个问题。

但是一些程序员可能不同意该文章中使用的体系结构,因为模型 类 项目正在作为 DLL 分发给客户。而在 WCF 中通常,类 通过服务公开。