MarshalByRefObject和Serializable

转自:http://hi.baidu.com/smile8021/blog/item/f6b81e0aa870713db1351d82.html(天天向上)

最近在看web sevice 方面的东西,顺便看了下序列化,懂了不少啊 :

从MarshalByRefObject派生的类和有[Serializable]的类都可以跨越应用程序域作为参数传递。
从MarshalByRefObject派生的类按引用封送,有[Serializable]标志的类,按值封送。
如果此类即从MarshalByRefObject派生,也有[Serializable]标志也是按引用封送。

序列化有3种情况:

  1. 序列化为XML格式:
    在webservice里,写个web method,传个自定义类做参数,就是这种情况。系统会帮你搞定,把自定义的类转换为默认XML格式。
  2. 序列化为2进制:
    要加[Serializable]标志,可以把私有变量和公共变量都序列化。
  3. 序列化为soap格式:
    需要实现ISerializable接口,定义序列化函数ISerializable.GetObjectData,和还原序列化的构造函数。
    一个soap参数类的sample:
[Serializable]
    
public class
serialze:ISerializable
    
{
        
// 序列化函数,由 SoapFormatter 在序列化过程中调用

        void ISerializable.GetObjectData(SerializationInfo info, StreamingContext
             ctxt)
        
{
            
// 向 SerializationInfo 对象中添加每个字段

             info.AddValue("UserName" , UserName);
             info.AddValue(
"UserID"
,UserID);
         }


        
// 还原序列化构造函数,由 SoapFormatter 在还原序列化过程中调用
        public serialze(SerializationInfo info, StreamingContext ctxt)
        
{
            
// 从 SerializationInfo 对象中还原序列化出各个字段

             UserName = (string)info.GetValue("UserName", typeof(string ));
             UserID
= (int) info.GetValue("UserID",typeof(int
));
         }

  
        
public serialze()
        
{}


        
public string UserName;
        
public int
UserID;
     }

转载于:https://www.cnblogs.com/wwlearn/archive/2009/02/02/1382642.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值