.net 如何将e.Result(WCF服务返回的)转换为列表<>;?
有一个WCF服务:.net 如何将e.Result(WCF服务返回的)转换为列表<>;?,.net,asp.net,silverlight,wcf,web-services,.net,Asp.net,Silverlight,Wcf,Web Services,有一个WCF服务: public List<Aktivy> Aktivy() { DataClassesDataContext db = new DataClassesDataContext(); var aktivy = from akt in db.Aktivys select aktivy; return aktivy.ToList(); } privat
public List<Aktivy> Aktivy()
{
DataClassesDataContext db = new DataClassesDataContext();
var aktivy = from akt in db.Aktivys
select aktivy;
return aktivy.ToList();
}
private void Grid_Loaded(object sender, System.Windows.RoutedEventArgs e)
{
ServiceReference.ServiceClient webService = new ServiceReference.ServiceClient();
webService.AktivyCompleted += new EventHandler<ServiceReference.AktivyCompletedEventArgs>(webService_AktivyCompleted);
webService.AktivyAsync();
}
void webService_AktivyCompleted(object sender, ServiceReference.AktivyCompletedEventArgs e)
{
}
public List Aktivy()
{
DataClassesDataContext db=新DataClassesDataContext();
var aktivy=来自数据库中的akt.Aktivys
选择aktivy;
返回aktivy.ToList();
}
此外,还有一个Silverlight客户端可访问WCF服务:
public List<Aktivy> Aktivy()
{
DataClassesDataContext db = new DataClassesDataContext();
var aktivy = from akt in db.Aktivys
select aktivy;
return aktivy.ToList();
}
private void Grid_Loaded(object sender, System.Windows.RoutedEventArgs e)
{
ServiceReference.ServiceClient webService = new ServiceReference.ServiceClient();
webService.AktivyCompleted += new EventHandler<ServiceReference.AktivyCompletedEventArgs>(webService_AktivyCompleted);
webService.AktivyAsync();
}
void webService_AktivyCompleted(object sender, ServiceReference.AktivyCompletedEventArgs e)
{
}
private void Grid\u已加载(对象发送方,System.Windows.RoutedEventArgs e)
{
ServiceReference.ServiceClient webService=新的ServiceReference.ServiceClient();
webService.AktivyCompleted+=新事件处理程序(webService\u AktivyCompleted);
AktivyAsync();
}
void webService_AktivyCompleted(对象发送方,ServiceReference.AktivyCompletedEventArgs e)
{
}
如何在客户端的
列表中转换e.Result(其功能是webService_AktivyCompleted)?如何将e.Result转换为列表
var listOfAktivy = (List<Aktivy>)e.Result;
var listOfAktivy=(List)e.Result;
无论如何,您可以在“监视/快速监视”窗口中查看e的类型。我认为这取决于您如何配置客户端以在服务引用中生成集合类型
默认情况下,客户端将根据wsdl中的定义生成简单数组,但可以将其配置为生成列表(通过将“添加服务引用”对话框的“高级”选项卡中的“集合类型”选项更改为System.Collections.Generic.List)
无论您采用哪种方式,我认为这都会起作用(但我没有测试过:
List<Aktivity> listOfAktivy = new List<Aktivy>((IEnumerable<Aktivity>)e.Result);
List listOfAktivy=新列表((IEnumerable)e.Result);
默认情况下,当您在Silverlight中配置服务引用时,收集类型设置为反序列化到ObservableCollection
(它不是列表
)。如果您总是想要一个简单的列表
,则可以修改服务引用的配置(在解决方案资源管理器中的服务上单击鼠标右键)并将集合设置为表示为列表
但是,处理这些问题时,更好的方法是使用接口,而不是要求使用特定类型。修改代码以使用IList
(aobservateCollection
实现IList
)这将不使用列表
,而是使用服务可能配置的任何可能的集合类型
由于observateCollection
是可用选项中用途最广的一种,因此您必须有一个很好的理由来解释为什么集合必须是List
。其中一个原因可能是因为您在服务器和客户端之间共享代码。这可能不会适用于所有其他默认设置。e、 结果
将不是类型
列表。该代码效率不高,您要求代码复制整个结果。最好按照您所说的正确配置服务引用。@Anthony,我完全同意。这确实是对@Kamarey answer的响应,如果结果不是列表类型,则不会起作用。@Kamarey answer.我会编辑以使其更清楚。