使用WCF服务返回List <t> </t>

时间:2012-05-18 05:05:46

标签: c# wcf

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

[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 ----&gt;

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

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

enter image description here

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

3 个答案:

答案 0 :(得分:5)

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

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

WCF: Serialization and Generics

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

Known Types and the Generic Resolver

答案 1 :(得分:2)

您可以使用IList<T>代替List<T>

答案 2 :(得分:2)

Changes in my Solution

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

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

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

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