在ASP.NET 2.0 Web服务中公开其他类

时间:2010-07-21 14:37:21

标签: c# .net .net-2.0 asmx web-services

考虑一个公开抽象类的web方法:

[WebMethod]
public void Save(AbstractEntity obj) 
{  
   // ..
}

有几个类继承自AbstractEntity,如

public class Patient : AbstractEntity 
{
   // ...
}

现在我想让webservice使用者创建一个新的Patient对象并保存它:

service.Save(new Patient { Name = "Doe", Number = "1234567" });

因为“保存”采用AbstractEntity,所以客户端没有患者代理。我当然可以创建一个暴露患者的虚拟方法,但我希望有更好的方法。

如何以一种很好的方式公开Patient类和其他未直接在webservice界面中引用的类?

1 个答案:

答案 0 :(得分:5)

您需要在方法中添加XmlInclude属性:

[WebMethod]
[XmlInclude(typeof(Patient))] 
public void Save(AbstractEntity obj) 
{  
   // ..
}

如评论中所述,当您添加XmlInclude属性并在客户端更新Web引用时,将生成AbstractEntity和Patient(从AbstractEntity派生)的代理类。

一件不太好的事情是,无论何时创建一个派生自AbstractEntity的新类,您都必须为所有相关的Web方法添加另一个XmlInclude属性。