前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实体类的二进制序列化

实体类的二进制序列化

作者头像
用户1177503
发布2018-02-26 16:12:39
9450
发布2018-02-26 16:12:39
举报
文章被收录于专栏:程序员的SOD蜜程序员的SOD蜜

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

代码语言:javascript
复制
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数据开发框架)的实体类也提供了二进制序列化功能,下面我们来演示一下它的使用:

代码语言:javascript
复制
//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.

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

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

代码语言:javascript
复制
T GetEntity<T>(byte[] buffer ) where T:EntityBase 
        {
            return (T)PdfNetSerialize.BinaryDeserialize(buffer, typeof(T));
        }

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档