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

 更新时间:2017年02月15日 10:49:59   投稿:jingxian  
下面小编就为大家带来一篇protobuf对象二进制序列化存储(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

首先下载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#?使用原生?System.IO.Compression?实现?zip?的压缩与解压

    C#?使用原生?System.IO.Compression?实现?zip?的压缩与解压

    这篇文章主要介绍了C#?使用原生?System.IO.Compression?实现?zip?的压缩与解压,zip?是一个非常常见的压缩包格式,本文主要用于说明如何使用代码?文件或文件夹压缩为?zip压缩包及其解压操作,需要的朋友可以参考下
    2022-09-09
  • 一文搞懂c# await,async执行流

    一文搞懂c# await,async执行流

    这篇文章主要介绍了c# await,async执行流的相关知识,文章讲解的非常细致,代码帮助理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • c# 实现图片查看器

    c# 实现图片查看器

    这篇文章主要介绍了c# 如何实现图片查看器,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • C#中利用LINQ to XML与反射把任意类型的泛型集合转换成XML格式字符串的方法

    C#中利用LINQ to XML与反射把任意类型的泛型集合转换成XML格式字符串的方法

    本文主要介绍了C#中利用LINQ to XML与反射把任意类型的泛型集合转换成XML格式字符串的方法:利用反射,读取一个类型的所有属性,然后再把属性转换成XML元素的属性或者子元素。下面注释比较完整,需要的朋友可以看下
    2016-12-12
  • C# 邮件发送和接收实现代码

    C# 邮件发送和接收实现代码

    这两个方法很容易理解,只实现了最基本的功能,如果需要可以查看源代码获取更多信息。
    2009-07-07
  • C# 图片格式转换的实例代码

    C# 图片格式转换的实例代码

    这篇文章主要介绍了C# 图片格式转换的实例代码,文中讲解非常详细,帮助大家更好的理解和学习c#,感兴趣的朋友可以了解下
    2020-08-08
  • C# Newtonsoft.Json 解析多嵌套json 进行反序列化的实例

    C# Newtonsoft.Json 解析多嵌套json 进行反序列化的实例

    这篇文章主要介绍了C# Newtonsoft.Json 解析多嵌套json 进行反序列化的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • C#使用ILGenerator动态生成函数的简单代码

    C#使用ILGenerator动态生成函数的简单代码

    这篇文章主要介绍了C#使用ILGenerator动态生成函数的简单代码,需要的朋友可以参考下
    2017-08-08
  • WPF利用RPC调用其他进程的方法详解

    WPF利用RPC调用其他进程的方法详解

    这篇文章主要给大家介绍了关于WPF利用RPC调用其他进程的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-05-05
  • C#实现异步GET的方法

    C#实现异步GET的方法

    这篇文章主要介绍了C#实现异步GET的方法,涉及C#异步请求的相关实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07

最新评论

?


http://www.vxiaotou.com