protobuf對象二進(jìn)制序列化存儲(詳解)
首先下載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> /// 序列化-表字段業(yè)務(wù)信息 /// </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對象二進(jìn)制序列化存儲(詳解)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持我們。
上一篇:c#中@的3種作用
欄 目:C#教程
下一篇:C#實現(xiàn)判斷文件夾存在與否并創(chuàng)建文件夾的方法
本文標(biāo)題:protobuf對象二進(jìn)制序列化存儲(詳解)
本文地址:http://mengdiqiu.com.cn/a1/C_jiaocheng/5904.html
您可能感興趣的文章
- 01-10C#實現(xiàn)獲取不同對象中名稱相同屬性的方法
- 01-10C#編程自學(xué)之類和對象
- 01-10C#編程實現(xiàn)對象與JSON串互相轉(zhuǎn)換實例分析
- 01-10輕松學(xué)習(xí)C#的屬性
- 01-10C#編程中使用ref和out關(guān)鍵字來傳遞數(shù)組對象的用法
- 01-10詳解C#面相對象編程中的繼承特性
- 01-10講解C#面相對象編程中的類與對象的特性與概念
- 01-10解析C#面向?qū)ο缶幊讨蟹椒ǎ╩ethod)的使用
- 01-10Python設(shè)計模式編程中的備忘錄模式與對象池模式示例
- 01-10詳解C#中使用對象或集合的初始值設(shè)定項初始化的操作


閱讀排行
本欄相關(guān)
- 01-10C#通過反射獲取當(dāng)前工程中所有窗體并
- 01-10關(guān)于ASP網(wǎng)頁無法打開的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實現(xiàn)txt定位指定行完整實例
- 01-10WinForm實現(xiàn)仿視頻 器左下角滾動新
- 01-10C#停止線程的方法
- 01-10C#實現(xiàn)清空回收站的方法
- 01-10C#通過重寫Panel改變邊框顏色與寬度的
- 01-10C#實現(xiàn)讀取注冊表監(jiān)控當(dāng)前操作系統(tǒng)已
隨機(jī)閱讀
- 01-11ajax實現(xiàn)頁面的局部加載
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-10C#中split用法實例總結(jié)
- 04-02jquery與jsp,用jquery
- 01-10delphi制作wav文件的方法
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05DEDE織夢data目錄下的sessions文件夾有什