protobuf對(duì)象二進(jìn)制序列化存儲(chǔ)(詳解)
更新時(shí)間:2017年02月15日 10:49:59 投稿:jingxian
下面小編就為大家?guī)?lái)一篇protobuf對(duì)象二進(jìn)制序列化存儲(chǔ)(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
首先下載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# 獲取網(wǎng)頁(yè)中指定的字符串信息的實(shí)例代碼
c# 獲取網(wǎng)頁(yè)中指定的字符串信息的實(shí)例代碼,需要的朋友可以參考一下2013-04-04
C#中實(shí)現(xiàn)Fluent Interface的三種方法
這篇文章主要介紹了C#中實(shí)現(xiàn)Fluent Interface的三種方法,本文講解了Fluent Interface的簡(jiǎn)單實(shí)現(xiàn)、使用裝飾器模式和擴(kuò)展方法實(shí)現(xiàn)Fluent Interface等3種實(shí)現(xiàn)方法,需要的朋友可以參考下2015-03-03
C#使用后臺(tái)線程BackgroundWorker處理任務(wù)的總結(jié)
這篇文章主要介紹了C#使用后臺(tái)線程BackgroundWorker處理任務(wù)的總結(jié),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07

