注:vs2017安装的Google Protocol Buffer
2、Buffer的序列化和反序列化
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using ProtoBuf;
using SocketHelp;
namespace ConsoleApp1
{
public class ProtobufSerializer
{
/// <summary>
/// 序列化 string类型
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="t"></param>
/// <returns></returns>
public static string Serialize<T>(T t)
{
using (MemoryStream ms = new MemoryStream())
{
Serializer.Serialize<T>(ms, t);
return Encoding.UTF8.GetString(ms.ToArray());
//return Encoding.Unicode.GetString(ms.ToArray());
}
}
/// <summary>
/// 序列化 byte
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="t"></param>
/// <returns></returns>
public static byte[] Serialize_byte<T>(T t)
{
using (MemoryStream ms = new MemoryStream())
{
Serializer.Serialize<T>(ms, t);
//定义二级制数组,保存序列化后的结果
byte[] result = new byte[ms.Length];
//将流的位置设为0,起始点
ms.Position = 0;
//将流中的内容读取到二进制数组中
ms.Read(result, 0, result.Length);
return result;
}
}
/// <summary>
/// 反序列化 string
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="content"></param>
/// <returns></returns>
public static T DeSerialize<T>(string content)
{
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(content)))
//using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(content)))
{
//ms.Position = 0;
T t = Serializer.Deserialize<T>(ms);
return t;
}
}
/// <summary>
/// 反序列化 string
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="content"></param>
/// <returns></returns>
public static T DeSerialize<T>(byte[] result)
{
using (MemoryStream ms = new MemoryStream())
//using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(content)))
{
//将消息写入流中
ms.Write(result, 0, result.Length);
//将流的位置归0
ms.Position = 0;
//使用工具反序列化对象
T t = Serializer.Deserialize<T>(ms);
return t;
}
}
}
}