protobuf对象二进制序列化存储(详解)

所属分类: 软件编程 / C#教程 阅读数: 45
收藏 0 赞 0 分享

首先下载protobuf库,可以用Nuget。

demo:

using System;

namespace Tools
{
  public class BufHelp
  {
    /// <summary>
    /// 对象锁
    /// </summary>
    private readonly static Object Locker = new Object();
    ///// <summary>
    ///// 读写分离锁
    ///// </summary>
    ///// <remarks>aaaaa</remarks>
    //private static ReaderWriterLockSlim rwl = new ReaderWriterLockSlim();

    /// <summary>
    /// 序列化-表字段业务信息
    /// </summary>
    public static bool ProtoBufSerialize<T>(T model, string filename) where T : class
    {
      try
      {
        string binpath = Config.KeyCenter.KeyBaseDirectory + @"Config\";

        if (!System.IO.Directory.Exists(binpath))
          System.IO.Directory.CreateDirectory(binpath);

        lock (Locker)
        {
          using (var file = System.IO.File.Create(binpath + filename))
          {
            ProtoBuf.Serializer.Serialize<T>(file, model);
            return true;
          }
        }
      }
      catch
      {
        return false;
      }
    }

    public static T ProtoBufDeserialize<T>(string filename) where T : class
    {
      var dbpath = Config.KeyCenter.KeyBaseDirectory + @"Config\" + filename;

      if (System.IO.File.Exists(dbpath))
      {
        lock (Locker)
        {
          using (var file = System.IO.File.OpenRead(dbpath))
          {
            var result = ProtoBuf.Serializer.Deserialize<T>(file);
            return result;
          }
        }
      }

      return default(T);
    }
  }
}/// <summary>
    /// 序列化
    /// </summary>
    public static string Serialize<T>(T t) where T : class
    {
      using (MemoryStream ms = new MemoryStream())
      {
        ProtoBuf.Serializer.Serialize<T>(ms, t);
        return Encoding.UTF8.GetString(ms.ToArray());
      }
    }
    /// <summary>
    /// 反序列化
    /// </summary>
    public static T DeSerialize<T>(string content) where T : class
    {
      using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(content)))
      {
        T t = ProtoBuf.Serializer.Deserialize<T>(ms);
        return t;
      }
    }

以上这篇protobuf对象二进制序列化存储(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

C#使用oledb读取excel表格内容到datatable的方法

这篇文章主要介绍了C#使用oledb读取excel表格内容到datatable的方法,涉及C#操作oledb及datatable的相关技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

C#使用oledb操作excel文件的方法

这篇文章主要介绍了C#使用oledb操作excel文件的方法,涉及C#中oledb操作excel的相关技巧,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C#使用IHttpModule接口修改http输出的方法

这篇文章主要介绍了C#使用IHttpModule接口修改http输出的方法,涉及C#操作IHttpModule接口的相关技巧,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C#给图片加水印的简单实现方法

这篇文章主要介绍了C#给图片加水印的简单实现方法,涉及C#操作图片的相关技巧,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C#生成随机数的方法小结

这篇文章主要介绍了C#生成随机数的方法,实例总结了C#生成随机数的相关技巧,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C#使用jQuery实现无刷新评论提交的方法

这篇文章主要介绍了C#使用jQuery实现无刷新评论提交的方法,涉及C#结合jQuery进行Ajax操作的相关技巧,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C#读取中文文件出现乱码的解决方法

这篇文章主要介绍了C#读取中文文件出现乱码的解决方法,涉及C#中文编码的操作技巧,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C#图像对比度调整的方法

这篇文章主要介绍了C#图像对比度调整的方法,涉及C#实现图像对比度操作的相关技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

C#图像灰度级拉伸的方法

这篇文章主要介绍了C#图像灰度级拉伸的方法,涉及C#灰度操作的相关技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

C#图像线性变换的方法

这篇文章主要介绍了C#图像线性变换的方法,涉及C#操作图像线性变换的相关技巧,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多