WCF客户端列表<>

时间:2011-01-11 14:38:02

标签: wcf

我使用方法(GetUserSoftware)获得了一个WCF服务,以便将List发送给客户端。

我定义的软件如下:

[DataContract]
public class Software
{
    public string SoftwareID { get; set; }
    public string SoftwareName { get; set; }
    public string DownloadPath { get; set; }
    public int PackageID { get; set; }

}

该方法正在通过我的数据库将所有软件提供给clien,并生成一个列表以发送回客户端。

问题是我在客户端将列表转换为数组。并且该数组中的每个项目都不包含我的任何软件属性。

我已经通过服务器端调试了我的方式。并看到它即将发送的列表是正确的。使用预期的软件和归属。

任何人都知道如何解决这个问题或知道我能做些什么?

5 个答案:

答案 0 :(得分:4)

您是否忘记了属性的[DataMemeber]属性?

答案 1 :(得分:4)

对类型使用DataContract属性时,必须为要在服务和客户端之间序列化和传输的每个属性或字段使用DataMember属性。默认情况下,集合创建为数组。如果您不喜欢它,可以在“添加服务引用”窗口中更改此行为 - >高级设置,您可以在其中选择应使用的集合类型。

答案 2 :(得分:1)

首先,您要序列化的每个属性都应具有[DataMember]属性:

[DataContract]
public class Software
{
    [DataMember]
    public string SoftwareID { get; set; }
    [DataMember]
    public string SoftwareName { get; set; }
    [DataMember]
    public string DownloadPath { get; set; }
    [DataMember]
    public int PackageID { get; set; }    
}

其次,对数组的转换将由客户端处理,而不是服务器。

答案 3 :(得分:0)

添加服务引用时,可以在客户端上维护列表而不是数组:单击“高级”按钮并将集合类型更改为所需的集合类型。

答案 4 :(得分:0)

我遇到了同样的问题,现在我解决了!这是一个ServiceKnownType问题。如果你有一个已知的类型加载器,我们必须添加运行时类型,如;

Type aaa =  Type.GetType("System.Collections.Generic.List`1[[ProjectName.BusinessObjects.Bank, ProjectName.BusinessObjects, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null]]");

knownTypes.Add(aaa);

任何有相同问题的人都可以试试这个。它在我的环境中工作!