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