WCF OperationContract返回List <customtype> </customtype>

时间:2014-08-29 13:53:28

标签: c# wcf windows-phone-8

我有一个返回List的WCF服务。

[DataContract]
public class EmployeesVM
{
    [DataMember]
    public int ID { get; set; }
    [DataMember]
    public string Name { get; set; }
}

我正在使用EF将Employees列表返回给此类。在我正在使用的WCF服务中:

    public IList<EmployessVM> getEmployees()
    {
        using (var dbContext = new SecEntities())
        {
            return (from e in dbContext.Employees
                    select new EmployeesVM {
                       ID = e.ID,
                       Name = e.Name
                    }).ToList();
        }
    }

在我的Windows Phone 8客户端应用程序中,我需要从方法中获取List。

    void proxy_getEmployeesCompleted(object sender, GetDataService.getEmployeesCompletedEventArgs e)
    {
        if (e.Result != null)
        {
            List<ViewModel.EmployeesVM> resultList = e.Result.ToList();
        }
    }

在我的WP ViewModel文件夹中,我有相同的类型:

public class EmployeesVM
{
    public int ID { get; set; }
    public string Name { get; set; }
}

但是,当我尝试编译时,我得到了这个错误:

 Cannot implicitly convert type      'System.Collections.Generic.List<SisSeguranca.GetDataService.EmployeesVM>' to 'System.Collections.Generic.List<SisSeguranca.ViewModel.EmployeesVM>'

我也试过这个,但也没有用。

 List<ViewModel.EmployeesVM> lista = (ViewModel.EmployeesVM)e.Result.ToList();

如何在我的客户端应用类型中转换具有相同字段和名称的WCF服务中返回的类型?

2 个答案:

答案 0 :(得分:3)

我相信您使用Visual Studio添加服务引用选项创建了服务引用。这将为您的WCF服务创建代理类。您的项目中似乎已经存在/引用了类似的类。这就是你得到错误的原因。可以选择重用现有类型。启用它。

请参阅:How to: Configure a Service to Reuse Existing Types

enter image description here

另一种选择是在单独的项目中分离合同和相关实体

请参阅:Things to Consider When Designing a WCF Contract

  

第一个建议是分离逻辑相关的接口,   合同,实体,消息和枚举成一个单独的   项目。一种方法是将类库项目添加到您的   解决方案,并在服务名称后面加上单词命名   &#34;合同&#34;附加到它。这方面的一个例子是   WcfService1.Contracts。

您可以在WCF服务中引用该dll /项目以及使用该服务的项目。

答案 1 :(得分:0)

您正在创建两个名为&#34; EmployeesVM&#34;你需要做的是把这个类拉出到你的&#34;服务器&#34;共享的DLL中。和Windows Phone。