2009-09-30 62 views
1

我有一個.net網絡服務與網絡方法,需要一個接口對象作爲參數,每當我嘗試訪問的方法我收到異常說:無法序列化成員產品IProduct,因爲它是一個接口。如何將接口對象傳遞給WebMethod?

任何建議,以解決問題??

[WebMethod] 
Public double CalculateTotal(IProduct product, int Quantity) 
{ 
    return product.Price * Quantity; 
} 
+0

花式發佈一些代碼? – 2009-09-30 08:51:49

+1

我覺得在這裏沒有指定的是將接口公開爲Web方法簽名的一部分是否合適?根據我個人的經驗,這似乎不是。 – Lisa 2011-05-04 00:03:11

回答

1

喜PRASHANT請嘗試做這樣的..

作爲代替

[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; 
    } 
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,並通過在具體的類就能夠識別的類型找到任何架構它,因此。

+0

返回類型是雙重的 – 2009-09-30 08:56:02

+0

不適用於我:( – 2009-09-30 09:11:06

+0

確保產品標有[可序列化] – James 2009-09-30 09:12:50