我有一个带Web方法的.Net Web服务,它接受一个Interface对象作为参数,每当我尝试访问该方法时,我都会遇到异常说: 无法序列化成员Product IProduct,因为它是一个接口。
任何解决问题的建议??
[WebMethod]
Public double CalculateTotal(IProduct product, int Quantity)
{
return product.Price * Quantity;
}
答案 0 :(得分:5)
尝试在方法中添加XmlInclude属性:
[WebMethod]
[XmlInclude(typeof(Product))]
Public double CalculateTotal(IProduct product, int Quantity)
{
return product.Price * Quantity;
}
修改
只是因为你对我使用“产品”这个类感到困惑。将此类替换为程序集中实现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;
}
基本上,当您将接口传递给Web服务时,它无法找到任何架构,因此如果您使用XmlInclude attribute并传入具体类,它将能够识别该类型。
答案 1 :(得分:1)
你好,请尝试这样做..
代替这个
[WebMethod]
Public double CalculateTotal(IProduct product, int Quantity)
{
return product.Price * Quantity;
}
只需添加一个抽象类becoz,你需要一个类型来序列化它..
[Serializable]
public abstract class ProductAbstract : IProduct
{
// define all methods/attributes of interface IProduct here as abstract methods/attributes
}
[WebMethod]
Public double CalculateTotal(ProductAbstract product, int Quantity)
{
return product.Price * Quantity;
}