我使用方法(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,并生成一个列表以发送回客户端。
问题是我在客户端将列表转换为数组。并且该数组中的每个项目都不包含我的任何软件属性。
我已经通过服务器端调试了我的方式。并看到它即将发送的列表是正确的。使用预期的软件和归属。
任何人都知道如何解决这个问题或知道我能做些什么?
答案 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);
任何有相同问题的人都可以试试这个。它在我的环境中工作!