实体类的二进制序列化

在.NET中,我们可以将对象序列化从而保存对象的状态到内存或者磁盘文件中,或者分布式应用程序中用于系统通信,一般来说,二进制序列化的效率要高,所获得的字节数最小,我们来看看下面的例子:

 

private   static   void  Main( string [] args)
{
  MemoryStream ms 
=   null ;
  Customer customer 
=  Customer.GetOneCustomer();
  
using  (ms  =   new  MemoryStream())
  {
      var formater 
=   new  BinaryFormatter();
      formater.Serialize(ms, customer);
      Console.WriteLine(
" BinaryFormatter Length:{0} " , ms.Length);
  }
  
using  (ms  =   new  MemoryStream())
  {
      var serializer 
=   new  XmlSerializer( typeof  (Customer));
      serializer.Serialize(ms, customer);
      Console.WriteLine(
" XmlSerializer Length:{0} " , ms.Length);
  }

PDF.NET(PWMIS数据开发框架)的实体类也提供了二进制序列化功能,下面我们来演示一下它的使用:

 

            // PDF.NET 实体类序列化、反序列化测试
            Customer customer  =   new  Customer();
            customer.CustomerBirthday 
=   new  DateTime( 1999 1 1 );
            customer.CustomerName 
=   " 张三 " ;
            customer.CustomerMobile 
=   " 13011111111 " ;
            
// 序列化
             byte [] buffer =   PdfNetSerialize.BinarySerialize(customer);
            
string  tempString =  Convert.ToBase64String(buffer);
            //反序列化
            
byte [] buffer2  =  Convert.FromBase64String(tempString);
            
// WFT_Customer customer2=(WFT_Customer) PdfNetSerialize.BinaryDeserialize(buffer2, typeof(WFT_Customer));
            Customer customer2  =  GetEntity < Customer > (buffer2);

上面的例子使用了Base64来将序列化后的字节数组转换成字符串,从而利于使用。如果想将二进制字节数组转直接换成字符串,可以使用具有8位编码的字符集转换,但不能使用其它字符集,比如Unicode、GB2312.

 

public   string  ConvertToString( object  targetObject){
       
// ISO8859-1 字符串,8位,只有这种可以完整保留二进制
        Encoding _encoding  =  Encoding.GetEncoding( 28591 );
       
byte [] buffer =  PdfNetSerialize.BinarySerialize((EntityBase)targetObject);
       
return  _encoding.GetString(buffer);
}

 

为了更通用,定义了一个GetEntity泛型方法,从二进制字节流反序列化获得一个实体类:

 

        T GetEntity < T > ( byte [] buffer )  where  T:EntityBase 
        {
            
return  (T)PdfNetSerialize.BinaryDeserialize(buffer,  typeof (T));
        }

 

所以,PDF.NET框架的序列化功能使用很简单,而且也有很高的效率。利用二进制序列化,可以将一个实体对象集合持久化到磁盘,这样就有可能做出一个“对象数据库”了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值