使用WCF服务返回List

我有一个Employee类,每个员工都有一个应用的叶子列表。 是否可以将列表AppliedLeave作为WCF中的[DataMember]

 [DataContract] public class Employee { [DataMember] public string UserID { get; set; } [DataMember] public int EmployeeNumber { get; set; } [ForeignKey("EmployeeUserID")] [DataMember] public List AppliedLeave { get { return _appliedLeaves; } set { _appliedLeaves = value; } } private List _appliedLeaves = new List(); ... } 

有没有其他方法可以做到这一点?

谢谢你对此事的考虑

我延伸我的问题

这是我的休假class:

 [DataContract] public class Leave { [Key()] [DataMember] public Guid LeaveId { get; set; } [DataMember] public string LeaveType { get; set; } [DataMember] public DateTime StartDate { get; set; } [DataMember] public string EmployeeUserID { get; set; } } 

这显示了ServiceContract —->

 [ServiceContract] public interface IEmployeeService { [OperationContract] Employee GetEmployeeByUserId(string userId); [OperationContract] void AssignSupervisor(string userId, string supervisorUserId); [OperationContract] void DeleteEmployeeByUserId(string userId); .... } 

在客户端应用中,

EmployeeServiceClient employeeService = new EmployeeServiceClient();

员工employee = employeeService.GetEmployeeByUserId(id);

但是,当员工从服务中收集时,它会显示Null for leaves,

在此处输入图像描述

有人能帮助我吗? 我在这做错了什么?

是的,可以从WCF服务操作返回generics。

但默认情况下,它们会在客户端转换为Array。 这可以在代理生成时自定义。

WCF:序列化和generics

此外,您还必须使用KnownTypeAttribute使用可以解析generics的所有类型来装饰服务。

已知类型和通用解析器

我的解决方案的变化

我还发现我的服务器端列表总是作为空指针到达客户端。 在浏览了很多这个问题后,我觉得它几乎总是被拒绝(“你的代码应该工作”)

发现问题..我使用一个“WCF服务”项目和一个带有生成服务引用的“Winforms app”项目配置了我的解决方案。 正如预期的那样,Service1的接口和实现都在WCF服务项目中。 但是任何列表成员都返回null。

当我把我的IService1.cs = 接口=在一个单独的类库中时,引用两侧的类库(使用)并再次生成服务引用,我的列表确实有效! 客户端生成的代码看起来更简单。

我不需要任何特殊属性,更改服务引用配置或接口引用。

您可以使用IList而不是List