Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何将e.Result(WCF服务返回的)转换为列表<>;?_.net_Asp.net_Silverlight_Wcf_Web Services - Fatal编程技术网

.net 如何将e.Result(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

有一个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)
    {            

    }
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
(a
observateCollection
实现
IList
)这将不使用
列表
,而是使用服务可能配置的任何可能的集合类型


由于
observateCollection
是可用选项中用途最广的一种,因此您必须有一个很好的理由来解释为什么集合必须是
List
。其中一个原因可能是因为您在服务器和客户端之间共享代码。

这可能不会适用于所有其他默认设置。
e、 结果
将不是类型
列表。该代码效率不高,您要求代码复制整个结果。最好按照您所说的正确配置服务引用。@Anthony,我完全同意。这确实是对@Kamarey answer的响应,如果结果不是列表类型,则不会起作用。@Kamarey answer.我会编辑以使其更清楚。