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);
}
}
}
}