我必須在VS2008 C#中實現一個簡單的常規Web服務,它將接收一個Order類對象,其中包含一個Product類對象列表。當我在客戶端上創建Order類對象的實例時出現問題。它在代理中聲明並且不包含任何方法,因此我沒有機會添加產品,因爲產品列表現在只是一個System.Array。如何將包含自定義列表的自定義類的對象傳遞給Web服務?
工作正常的一種方法是在客戶端上手動序列化爲XML並在Web服務中反序列化。這樣我會使用同樣的類聲明,我將它隔離成一個在Web服務和客戶端應用程序之間共享的DLL。但是,我被告知可以避免使用共享DLL和手動序列化,但我只是不明白如何,即如何聲明/定義Order類以及爲了使它具有方法在客戶端?
目前類被定義爲在共享DLL如下:
namespace MyNS
{
[Serializable]
public class ProductInfo {
public Int32 ProductID;
public Int32 Quantity;
public decimal CurrPrice;
public VE_ProductInfo() {
ProductID = 0;
Quantity = 0;
CPrice = 0;
}
public ProductInfo(Int32 pId, Int32 quant, decimal cprice)
{
ProductID = pId;
Quantity = quant;
CPrice = cprice;
}
}
[Serializable]
public class OrderInfo
{
public Int32 CustomerId = 0;
public OrderInfo() {
Items = new List<ProductInfo>();
}
[XmlArray]
public List<ProductInfo> Items {get; set;}
public string SpecialInstructions;
public void AddProduct(ProductInfo pi)
{
Items.Add(pi);
}
}
}
此類然後在web服務方法使用如下:
public bool CreateOrder(OrderInfo Order) {
// some code
}
,它被稱爲從如下客戶端:
WebService.MyWebService s;
WebService.OrderInfo o = new WebService.OrderInfo();
o.CustomerId = 1;
o.Items.Add(new ProductInfo(2, 4));
o.Items.Add(new ProductInfo(1, 2, 3.95m));
checkBox1.Checked = s.CreateOrder(o);
您可能指的是聲明/定義代理類的Reference.cs。我只是從那裏刪除聲明,是這麼簡單嗎? 8() – ajeh
是的,只是不要刪除創建的代理類,以便能夠調用Web方法。 – moron4hire
這是一個真正的天才解決方案!奇蹟般有效。我剛剛從Reference.cs中評論了Order和Product類。這些類已經可以序列化,並且具有默認的構造函數,所以它就可以工作。由於在這裏新來過,我還不能鼓勵你,但請放心,我會盡快做到!非常感謝。 – ajeh