如何将Interface对象传递给WebMethod?

Pra*_*dda 1 .net c# oop web-services interface

我有一个带Web方法的.Net Web服务,它接受一个I​​nterface对象作为参数,每当我尝试访问该方法时,我得到异常说:无法序列化成员Product IProduct,因为它是一个接口.

有什么建议可以解决问题吗?

[WebMethod]
Public double CalculateTotal(IProduct product, int Quantity)
{
  return product.Price * Quantity;
}
Run Code Online (Sandbox Code Playgroud)

Jam*_*mes 5

尝试在方法中添加XmlInclude属性:

[WebMethod]
[XmlInclude(typeof(Product))]
Public double CalculateTotal(IProduct product, int Quantity)
{  
    return product.Price * Quantity;
}
Run Code Online (Sandbox Code Playgroud)

编辑

只是因为你对我使用"产品"这个类感到困惑.将此类替换为实现IProduct的程序集中的任何类,例如

[Serializable]
public class Product : IProduct
{
     public Product(string name, double price)
     {
         this.Name = name;
         this.Price = price;
     }

     public string Name { get; private set; }
     public double Price { get; private set; }
}

public interface IProduct
{
    string Name { get; }
    double Price { get; }
}

....

[Web Method]
[XmlInclude(typeof(Product))]
Public double CalculateTotal(IProduct product, int quantity)
{
     return product.Price * quantity;
}
Run Code Online (Sandbox Code Playgroud)

基本上,当您将接口传递给Web服务时,它无法找到任何架构,因此如果您使用XmlInclude属性并传入具体类,它将能够识别该类型.