zoukankan      html  css  js  c++  java
  • 關於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);
        }
    }
  • 相关阅读:
    Spire.xls破解
    TCP端口
    GIT PUSH SSL certificate problem
    Winform 按钮权限拦截AOP
    .Net(C#)汉字和Unicode编码互相转换
    http://www.cnblogs.com/revealit/p/6094750.html基于C#的RSA非对称加密算法
    C#RSACryptoServiceProvider加密
    Mac 如何将apache的这个默认目录更改到用户目录下
    将博客搬至CSDN
    学习笔记一:操作系统的四大特征
  • 原文地址:https://www.cnblogs.com/godwar/p/1128137.html
Copyright © 2011-2022 走看看