我的类在序列化期间丢失了它的方法
本文关键字:方法 序列化 我的 | 更新日期: 2023-09-27 18:33:53
我的问题是什么
从 ASMX 服务返回的对象用于 Silverlight 应用程序。类具有方法,但 ASMX WebMethod 的结果不显示对象上的方法。
告诉我更多
这是我的班级
public class Dog
{
public string Name{get;set;}
public void Bark();
}
这是网络方法
[WebMethod]
public List<Dog> Findlabrador()
{
blah blah blah
return list_of_labrador;
}
银光代码
void LabradorFetchCompleted(object sender, LabradorFetchCompletedEventArgs e)
{
var list_of_labrador = e.Result;
foreach(var labradorDog in list_of_labrador)
{
labradorDog.Bark();
//** WTH my labrador can't BARK** Bark method is not shown in intellisense there is compilation error if i explicitly specify
}
}
我是程序员不是门外汉
好吧,嗯,让我把你的话说出来。以下是重现问题的步骤
创建一个 Silverlight 应用程序项目(让 VS 创建网站来托管应用程序(
创建 Silverlight 类库 在其中创建 Dog 类
将 Silverlight 类库编译为程序集(
Dog.dll
(将
Dog.dll
silverlight 程序集的引用添加到 silverlight 应用程序项目将 Web 服务应用程序添加到项目中(DogService.asmx 注意
asmx
扩展(为
DogService
添加对 SilverlightDog.dll
程序集的引用从类中的 WebMethod 返回
hardcoded List<Dog>
类添加从服务到 Silverlight 应用程序的引用,创建代理客户端的实例并调用该方法
注意你的狗也不能吠叫:(
方法永远不会序列化。只有数据。您的方法、事件、索引器、构造函数等永远不会序列化。
无论如何,您都不应该使用 ASMX 服务。请改用 WCF。此外,WCF 还使您能够在客户端和服务之间共享数据类型。这将允许类似"序列化方法"的东西:可以在客户端和服务器上使用相同的方法。
您应该使用可移植类库定义所有公共类,http://msdn.microsoft.com/en-us/library/gg597391.aspx
然后,在 Silverlight 中使用 Web 服务时,应要求代理生成器重用这些类。这样可以确保您获得所有功能。
Web 服务定义 (WSDL( 只处理字段/属性。方法不会通过线路传输。