protobuf对象二进制序列化存储

首先下载protobuf库,可以用Nuget。

demo:

using System;

namespace Tools
{
    public class BufHelp
    {
        /// 
        /// 对象锁
        /// 
        private readonly static Object Locker = new Object();
        ///// 
        ///// 读写分离锁
        ///// 
        ///// http://www.360doc.com/content/13/1216/09/10504424_337515446.shtml
        //private static ReaderWriterLockSlim rwl = new ReaderWriterLockSlim();

        /// 
        /// 序列化-表字段业务信息
        /// 
        public static bool ProtoBufSerialize(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(file, model);
                        return true;
                    }
                }
            }
            catch
            {
                return false;
            }
        }

        public static T ProtoBufDeserialize(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(file);
                        return result;
                    }
                }
            }

            return default(T);
        }
    }
}
/// 
        /// 序列化
        /// 
        public static string Serialize(T t) where T : class
        {
            using (MemoryStream ms = new MemoryStream())
            {
                ProtoBuf.Serializer.Serialize(ms, t);
                return Encoding.UTF8.GetString(ms.ToArray());
            }
        }
        /// 
        /// 反序列化
        /// 
        public static T DeSerialize(string content) where T : class
        {
            using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(content)))
            {
                T t = ProtoBuf.Serializer.Deserialize(ms);
                return t;
            }
        }



你可能感兴趣的:(C#)