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

Dee*_*ons 1 c# silverlight web-services class asmx

什么是我的问题

从ASMX服务返回的对象在Silverlight应用程序中使用.类具有方法,但ASMX WebMethod的结果不显示对象的方法.

告诉我更多

这是我的课

public class Dog
{
      public string Name{get;set;}    
      public void Bark();
}
Run Code Online (Sandbox Code Playgroud)

这是WebMethod

[WebMethod]
public List<Dog> Findlabrador()
{
    blah blah blah
    return list_of_labrador;
}
Run Code Online (Sandbox Code Playgroud)

银光代码

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 
  }
}
Run Code Online (Sandbox Code Playgroud)

我是程序员而不是外行

好吧,嗯,让我说出你的话.以下是重现问题的步骤

  • 创建一个Silverlight应用程序项目(让VS创建网站来托管应用程序)

  • 创建一个Silverlight类库,在其中创建Dog类

  • 将Silverlight类库编译为assembly(Dog.dll)

  • Dog.dllsilverlight程序集的引用添加到silverlight应用程序项目中

  • 将WebService应用程序添加到项目中(DogService.asmx注意asmx扩展名)

  • 添加对Silverlight Dog.dll程序集的引用DogService

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

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

  • 看着你的狗也不能吠:(

Joh*_*ers 5

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

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