首先下载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对象二进制序列化存储(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持移动技术网。
如对本文有疑问, 点击进行留言回复!!
使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)
C#实现获取本地内网(局域网)和外网(公网)IP地址的方法分析
浅谈Visual Studio 2019 Vue项目的目录结构
网友评论