protobuf對(duì)象二進(jìn)制序列化存儲(chǔ)(詳解)
首先下載protobuf庫(kù),可以用Nuget。
demo:
using System;
namespace Tools
{
public class BufHelp
{
/// <summary>
/// 對(duì)象鎖
/// </summary>
private readonly static Object Locker = new Object();
///// <summary>
///// 讀寫(xiě)分離鎖
///// </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對(duì)象二進(jìn)制序列化存儲(chǔ)(詳解)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
C# WinForm中Panel實(shí)現(xiàn)用鼠標(biāo)操作滾動(dòng)條的實(shí)例方法
由于在WinForm中Panel不能直接響應(yīng)鼠標(biāo)的滾動(dòng)事件,只好采用捕獲窗體的滾動(dòng)事件。2013-03-03
使用C#和Jieba.NET實(shí)現(xiàn)中英文混合文本關(guān)鍵詞的提取功能
Jieba.NET?是一個(gè)在?C#?中實(shí)現(xiàn)的分詞庫(kù),它基于?Java?的?jieba?分詞庫(kù),并進(jìn)行了?C#?語(yǔ)言的移植,Jieba?是一個(gè)高效的中文分詞工具,能夠處理全模式、精確模式以及搜索引擎模式,本文給大家介紹了如何使用C#和Jieba.NET實(shí)現(xiàn)中英文混合文本關(guān)鍵詞的提取功能2025-03-03
Unity?UGUI的GraphicRaycaster射線投射組件介紹使用
這篇文章主要為大家介紹了Unity?UGUI的GraphicRaycaster射線投射組件介紹使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
C#使用protobuf-net進(jìn)行序列化的詳細(xì)操作
本文帶領(lǐng)大家學(xué)習(xí)C#中protobuf-net工具的另一種使用體驗(yàn),這個(gè)工具的使用體驗(yàn)屬于Code-First模式,先定義類(lèi)型,并使用注解進(jìn)行標(biāo)記,不需要先編寫(xiě).proto文件,感興趣的朋友跟隨小編一起看看吧2021-11-11
Winform學(xué)生信息管理系統(tǒng)各子窗體剖析(3)
這篇文章主要針對(duì)Winform學(xué)生信息管理系統(tǒng)各子窗體進(jìn)行剖析,感興趣的小伙伴們可以參考一下2016-05-05
關(guān)于C#?調(diào)用Dll?傳遞字符串指針參數(shù)的問(wèn)題
這篇文章主要介紹了C#?調(diào)用Dll傳遞字符串指針參數(shù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01
C#使用NPOI實(shí)現(xiàn)Excel讀取數(shù)據(jù)以及保存數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了C#如何使用core版本的NPOI實(shí)現(xiàn)Excel讀取數(shù)據(jù)以及保存數(shù)據(jù)功能,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2025-03-03
C#實(shí)現(xiàn)簡(jiǎn)易猜數(shù)字游戲
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)簡(jiǎn)易猜數(shù)字游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04

