我有一个返回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服务中返回的类型?
答案 0 :(得分:3)
我相信您使用Visual Studio添加服务引用选项创建了服务引用。这将为您的WCF服务创建代理类。您的项目中似乎已经存在/引用了类似的类。这就是你得到错误的原因。可以选择重用现有类型。启用它。
请参阅:How to: Configure a Service to Reuse Existing Types
另一种选择是在单独的项目中分离合同和相关实体
请参阅:Things to Consider When Designing a WCF Contract
第一个建议是分离逻辑相关的接口, 合同,实体,消息和枚举成一个单独的 项目。一种方法是将类库项目添加到您的 解决方案,并在服务名称后面加上单词命名 &#34;合同&#34;附加到它。这方面的一个例子是 WcfService1.Contracts。
您可以在WCF服务中引用该dll /项目以及使用该服务的项目。
答案 1 :(得分:0)
您正在创建两个名为&#34; EmployeesVM&#34;你需要做的是把这个类拉出到你的&#34;服务器&#34;共享的DLL中。和Windows Phone。