ProtoBuf序列化和反序列化方法

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)

猜你喜欢

转载自blog.csdn.net/weixin_46472622/article/details/129733057