3

我上了一堂Employee课,每个员工都有一份申请休假的清单。是否可以将列表AppliedLeave作为[DataMember]WCF 中的一个?

[DataContract]
public class Employee
{
    [DataMember]
    public string UserID { get; set; }

    [DataMember]
    public int EmployeeNumber { get; set; }

    [ForeignKey("EmployeeUserID")]
    [DataMember]
    public List<Leave> AppliedLeave
    {
        get { return _appliedLeaves; }
        set { _appliedLeaves = value; }
    }

    private List<Leave> _appliedLeaves = new List<Leave>();
    ...
 }

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

感谢您对此事的考虑

我扩展我的问题

这是我的假期班:

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

员工员工 = employeeService.GetEmployeeByUserId(id);

但是当 Employee 从服务中收集时,它显示 Null 表示叶子,

在此处输入图像描述

有人可以帮助我吗?我在这里做错了什么?

4

3 回答 3

5

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

但默认情况下,它们在客户端被强制转换为 Array。这可以在代理生成时进行定制。

WCF:序列化和泛型

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

已知类型和通用解析器

于 2012-05-18T05:11:14.850 回答
2

您可以使用IList<T>而不是List<T>.

于 2012-05-18T05:12:31.327 回答
2

我的解决方案的变化

我还发现我的服务器端列表总是以空指针的形式到达客户端。在为这个问题浏览了很多之后,它让我印象深刻,起初几乎总是被拒绝(“你的代码应该可以工作”)

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

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

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

于 2016-07-04T09:02:12.527 回答