using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace PCRobot.Utils { /// /// ProtoBuf-Net扩展方法类 /// public static class ProtoBufExtension { /// /// 将对象实例序列化为字符串(Base64编码格式)——ProtoBuf /// /// 对象类型 /// 对象实例 /// 字符串(Base64编码格式) public static string SerializeToString_PB(this T obj) { using (MemoryStream ms = new MemoryStream()) { ProtoBuf.Serializer.Serialize(ms, obj); return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length); } } /// /// 将字符串(Base64编码格式)反序列化为对象实例——ProtoBuf /// /// 对象类型 /// 字符串(Base64编码格式) /// 对象实例 public static T DeserializeFromString_PB(this string txt) { byte[] arr = Convert.FromBase64String(txt); using (MemoryStream ms = new MemoryStream(arr)) return ProtoBuf.Serializer.Deserialize(ms); } /// /// 将对象实例序列化为字节数组——ProtoBuf /// /// 对象类型 /// 对象实例 /// 字节数组 public static byte[] SerializeToByteAry_PB(this T obj) { using (MemoryStream ms = new MemoryStream()) { ProtoBuf.Serializer.Serialize(ms, obj); return ms.ToArray(); } } /// /// 将字节数组反序列化为对象实例——ProtoBuf /// /// 对象类型 /// 字节数组 /// public static T DeserializeFromByteAry_PB(this byte[] arr) { try { using (MemoryStream ms = new MemoryStream(arr)) return ProtoBuf.Serializer.Deserialize(ms); } catch (Exception) { return default(T); } } /// /// 将对象实例序列化为二进制文件——ProtoBuf /// /// 对象类型 /// 对象实例 /// 文件路径(目录+文件名) public static void SerializeToFile_PB(this T obj, string path) { using (var file = File.Create(path)) { ProtoBuf.Serializer.Serialize(file, obj); } } /// /// 将二进制文件反序列化为对象实例——ProtoBuf /// /// /// /// public static T DeserializeFromFile_PB(this string path) { using (var file = File.OpenRead(path)) { return ProtoBuf.Serializer.Deserialize(file); } } } }