• 關於Web Service 中使用NHibernate時無法序列化IList的問題


     
    用NHibernate進行數據庫的ORM操作, 很多清況下都免不了要生成像IList這種泛型接口的對象集合.
    但是如果再用到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;
    }

    下面的代碼是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);
        }
    }
  • 相关阅读:
    参考__JAVA
    债券价格和通胀率
    C++ 面试题
    欧式和美式期权
    explicit
    smart pointer
    const pointer
    manacher-马拉车算法
    输入有空格的字符串的2种方法
    bind()与connect()——计网中socket的使用
  • 原文地址:https://www.cnblogs.com/godwar/p/1128137.html
Copyright © 2020-2023  润新知