但是如果再用到Web Service來進行這種對象的傳輸的話, 就會報錯.
原因是IList為接口類型, 不能被序列化.
以下方法解
//要用到的主要類
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using System.IO;
//Web Service 方法, 假定
[WebMethod(Description = "Input the order No. to get the order's information.")]
public byte[] GetOrderByNo(string orderNo)
{
BinaryFormatter formatter = new BinaryFormatter();
List<string> orderList = new List<string>();
OrderNoBLL onBll = new OrderNoBLL(); //以下是從NHibernate中
OrderBLL bll = new OrderBLL(); //獲得對象的方法,具體的操作
OrderNo on = onBll.GetByNo(orderNo); //略
byte[] bs;
if (on != null)
{
MemoryStream ms = new MemoryStream(); //這裡是關鍵
//on.Order是一個Order對象, 其中有一個Items的IList<OrderItem>屬性
formatter.Serialize(ms, on.Order); //這裡可以進行序列化, ^_^
bs = ms.ToArray();
}
else
{
bs = new byte[0];
}
return bs;
}
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using System.IO;
//Web Service 方法, 假定
[WebMethod(Description = "Input the order No. to get the order's information.")]
public byte[] GetOrderByNo(string orderNo)
{
BinaryFormatter formatter = new BinaryFormatter();
List<string> orderList = new List<string>();
OrderNoBLL onBll = new OrderNoBLL(); //以下是從NHibernate中
OrderBLL bll = new OrderBLL(); //獲得對象的方法,具體的操作
OrderNo on = onBll.GetByNo(orderNo); //略
byte[] bs;
if (on != null)
{
MemoryStream ms = new MemoryStream(); //這裡是關鍵
//on.Order是一個Order對象, 其中有一個Items的IList<OrderItem>屬性
formatter.Serialize(ms, on.Order); //這裡可以進行序列化, ^_^
bs = ms.ToArray();
}
else
{
bs = new byte[0];
}
return bs;
}
下面的代碼是Client端的接收和反序列化的代碼:
protected void btn_Click(object sender, EventArgs e)
{
localhost.WebService service = new localhost.WebService();
byte[] bs = service.GetOrderByNo(no.Text); //從這裡取得傳回的二進制數組
Entity.Order order = null;
try
{
MemoryStream ms = new MemoryStream(bs); //這裡是關鍵
BinaryFormatter formatter = new BinaryFormatter();
order = (Entity.Order)formatter.Deserialize(ms); //再反序列化
noLb.Text = order.ID;
}
catch(Exception ex)
{
Response.Write(ex.Message);
}
}
{
localhost.WebService service = new localhost.WebService();
byte[] bs = service.GetOrderByNo(no.Text); //從這裡取得傳回的二進制數組
Entity.Order order = null;
try
{
MemoryStream ms = new MemoryStream(bs); //這裡是關鍵
BinaryFormatter formatter = new BinaryFormatter();
order = (Entity.Order)formatter.Deserialize(ms); //再反序列化
noLb.Text = order.ID;
}
catch(Exception ex)
{
Response.Write(ex.Message);
}
}