MarshalByRefObject和Serializable

作者在学习Web Service时了解了序列化相关知识。从MarshalByRefObject派生和有[Serializable]的类可跨应用程序域传参,前者按引用封送,后者按值封送。还介绍了序列化的三种情况,包括序列化为XML、二进制和SOAP格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在看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:
None.gif[Serializable]
None.gif    
public class serialze:ISerializable 
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif{
InBlock.gif        
// 序列化函数,由 SoapFormatter 在序列化过程中调用
InBlock.gif
        void ISerializable.GetObjectData(SerializationInfo info, StreamingContext
InBlock.gif            ctxt)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
// 向 SerializationInfo 对象中添加每个字段
InBlock.gif
            info.AddValue("UserName", UserName);
InBlock.gif            info.AddValue(
"UserID",UserID);
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
// 还原序列化构造函数,由 SoapFormatter 在还原序列化过程中调用
InBlock.gif
        public serialze(SerializationInfo info, StreamingContext ctxt)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
// 从 SerializationInfo 对象中还原序列化出各个字段
InBlock.gif
            UserName = (string)info.GetValue("UserName"typeof(string));
InBlock.gif            UserID 
= (int) info.GetValue("UserID",typeof(int));
ExpandedSubBlockEnd.gif        }

InBlock.gif  
InBlock.gif        
public serialze()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{}
InBlock.gif
InBlock.gif        
public string UserName;
InBlock.gif        
public int UserID;
ExpandedBlockEnd.gif    }

 

 

转载于:https://www.cnblogs.com/duibudui/archive/2004/08/26/36785.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值