我的类在序列化期间丢失了它的方法

本文关键字:方法 序列化 我的 | 更新日期: 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添加对 Silverlight Dog.dll程序集的引用

  • 从类中的 WebMethod 返回hardcoded List<Dog>

  • 添加从服务到 Silverlight 应用程序的引用,创建代理客户端的实例并调用该方法

  • 注意你的狗也不能吠叫:(

我的类在序列化期间丢失了它的方法

方法永远不会序列化。只有数据。您的方法、事件、索引器、构造函数等永远不会序列化。

无论如何,您都不应该使用 ASMX 服务。请改用 WCF。此外,WCF 还使您能够在客户端和服务之间共享数据类型。这将允许类似"序列化方法"的东西:可以在客户端和服务器上使用相同的方法。

您应该使用可移植类库定义所有公共类,http://msdn.microsoft.com/en-us/library/gg597391.aspx

然后,在 Silverlight 中使用 Web 服务时,应要求代理生成器重用这些类。这样可以确保您获得所有功能。

Web 服务定义 (WSDL( 只处理字段/属性。方法不会通过线路传输。