实体类的二进制序列化

简介:

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

 



    本文转自深蓝医生博客园博客,原文链接:http://www.cnblogs.com/bluedoctor/archive/2011/05/10/2042120.html,如需转载请自行联系原作者


相关文章
|
C#
C#高性能二进制序列化
二进制序列化可以方便快捷的将对象进行持久化或者网络传输,并且体积小、性能高,应用面甚至还要高于json的序列化;开始之前,先来看看dotcore/dotne自带的二进制序列化:C#中对象序列化和反序列化一般是通过BinaryFormatter类来实现的二进制序列化、反序列化的。
2143 0
|
Dubbo Java 应用服务中间件
关于在dubbo分布式种实体类Bean序列化产生的问题和内部类序列化的问题 UserServiceImpl must implement java.io.Serializable
今天在学习RPC dubbo的分布式 在跟老师学习的过程中,产生一个运行时报错,首先看项目结构和关键代码
439 0
关于在dubbo分布式种实体类Bean序列化产生的问题和内部类序列化的问题 UserServiceImpl must implement java.io.Serializable
|
JSON 数据格式 C++
Protobuf vs CBOR:新一代的二进制序列化格式
Protobuf vs CBOR:新一代的二进制序列化格式
2461 0
|
存储 XML JSON
二进制序列化器、XML序列化器、Json序列化器
序列化是将对象的状态信息转换未可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区读取或反序列化对象的状态,重新创建对象。
二进制BinaryFormatter 泛型 序列化与反序列化 (保存文件到本地和读取)
搬迁原来博客海澜CSDN #region using using System; using System.Collections; using System.
916 0
|
XML C# 数据格式
C# 实体类序列化与反序列化一 (XmlSerializer)
/// &lt;summary&gt; /// 实体类序列化的反序列化的类 /// &lt;/summary&gt; /// &lt;typeparam name="T"&gt;&lt;/typeparam&gt; public abstract class EntityClassXmlSerializer&lt;T&gt; {
1090 0
|
C#
C# 对象二进制序列化
using System.Runtime.Serialization.Formatters.Binary;public class SerializationUnit{            ///     /// 把对象序列化为字节数组    ///     public static by...
865 0
|
XML 移动开发 数据格式
自行开发高效精简的二进制序列化库(支持精简框架集)
在06年开发基于Window CE的嵌入式组态软件时就曾遇到序列化问题,由于程序运行在Window CE平台,其上的.Net Compact Framework仅支持XML序列化,而XML序列化不仅序列化后的体积较大,而且执行时间较长(参见我以前写的文章:嵌入式组态环境升级及XML反序列化慢的困惑、如何加速XML反序列化(精简框架集2.0SP1,WinCE4.2))。
664 0