考虑一个公开抽象类的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界面中引用的类?
答案 0 :(得分:5)
您需要在方法中添加XmlInclude属性:
[WebMethod]
[XmlInclude(typeof(Patient))]
public void Save(AbstractEntity obj)
{
// ..
}
如评论中所述,当您添加XmlInclude属性并在客户端更新Web引用时,将生成AbstractEntity和Patient(从AbstractEntity派生)的代理类。
一件不太好的事情是,无论何时创建一个派生自AbstractEntity的新类,您都必须为所有相关的Web方法添加另一个XmlInclude属性。