using ProtoBuf;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ProtoBuf.Serializers;
namespace Prorobuf_net_ProtoContract_
{
public class ProtoBuf_Serialize
{
static void Main()
{
ErrorLog errorLog = new ErrorLog();
errorLog.LogID = "1234";
Byte[] bytes = Serialize(errorLog);
string sa = Encoding.UTF8.GetString(bytes);
Console.WriteLine(sa);
}
/// <summary>
/// 将消息序列化为二进制的方法
/// </summary>
/// <param name="log">要序列化的对象</param>
/// <returns></returns>
public static byte[] Serialize(ErrorLog log)
{
// 涉及格式转换,需要用到流,将二进制序列化到流中
using (MemoryStream memoryStream = new MemoryStream())
{
//使用ProtoBuf工具的序列化方法
ProtoBuf.Serializer.Serialize(memoryStream, log);
return memoryStream.ToArray();
}
}
/// <summary>
/// 将收到的消息反序列化成对象
/// </summary>
/// <param name="data">收到的消息</param>
/// <returns></returns>
public static ErrorLog DeSerialize(byte[] data)
{
using (MemoryStream ms = new MemoryStream(data))
{
//使用工具反序列化对象
return ProtoBuf.Serializer.Deserialize<ErrorLog>(ms);
}
}
}
[ProtoContract]
public class ErrorLog
{
[ProtoMember(1)]
public string LogID { get; set; }
[ProtoMember(2)]
public string Context { get; set; }
[ProtoMember(3)]
public string Stack { get; set; }
}
}
辅助:Protobuf-net的使用 - 知乎 (zhihu.com)