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?的压缩与解压,zip?是一个非常常见的压缩包格式,本文主要用于说明如何使用代码?文件或文件夹压缩为?zip压缩包及其解压操作,需要的朋友可以参考下2022-09-09C#中利用LINQ to XML与反射把任意类型的泛型集合转换成XML格式字符串的方法
本文主要介绍了C#中利用LINQ to XML与反射把任意类型的泛型集合转换成XML格式字符串的方法:利用反射,读取一个类型的所有属性,然后再把属性转换成XML元素的属性或者子元素。下面注释比较完整,需要的朋友可以看下2016-12-12C# Newtonsoft.Json 解析多嵌套json 进行反序列化的实例
这篇文章主要介绍了C# Newtonsoft.Json 解析多嵌套json 进行反序列化的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2021-01-01
最新评论