我必须在 VS2008 C# 中实现一个简单的常规 Web 服务,它将接收一个 Order 类对象,其中包含一个 Product 类对象列表。当我在客户端上创建 Order 类对象的实例时,就会出现问题。它在代理中声明并且不包含任何方法,因此我没有机会添加产品,因为产品列表现在只是一个 System.Array。
一种很好的方法是在客户端手动序列化为 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);