using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
namespace KT.Common.ToolHelp
{
public class ProtoBufHelp
{
/// <summary>
/// 序列化对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="model"></param>
/// <returns></returns>
public static byte[] Serialize<T>(T model)
{
try
{
//涉及格式转换,需要用到流,将二进制序列化到流中
using (MemoryStream ms = new MemoryStream())
{
//使用ProtoBuf工具的序列化方法
ProtoBuf.Serializer.Serialize<T>(ms, model);
//定义二级制数组,保存序列化后的结果
byte[] result = new byte[ms.Length];
//将流的位置设为0,起始点
ms.Position = 0;
//将流中的内容读取到二进制数组中
ms.Read(result, 0, result.Length);
return result;
}
}
catch (Exception ex)
{
//LogUtils.InfoLog("序列化失败: " + ex.ToString());
return null;
}
}
// 将收到的消息反序列化成对象
// < returns>The serialize.< /returns>
// < param name="msg">收到的消息.</param>
public static T DeSerialize<T>(byte[] msg)
{
T result = default(T);
try
{
using (MemoryStream ms = new MemoryStream())
{
//将消息写入流中
ms.Write(msg, 0, msg.Length);
//将流的位置归0
ms.Position = 0;
//使用工具反序列化对象
result = ProtoBuf.Serializer.Deserialize<T>(ms);
return result;
}
}
catch (Exception ex)
{
//LogUtils.InfoLog("反序列化失败: " + ex.ToString());
return result;
}
}
}
[ProtoContract] public class ReportEmptyParkingDate { [ProtoMember(1)] public string messageId { get; set; } [ProtoMember(2)] public string busCode { get; set; } [ProtoMember(3)] public string reqDate { get; set; } [ProtoMember(4)] public string ver { get; set; } [ProtoMember(5)] public string sign { get; set; } [ProtoMember(6)] public string parkCode { get; set; } [ProtoMember(7)] public int eptCarports { get; set; } [ProtoMember(8)] public int fixedRemain { get; set; } [ProtoMember(9)] public int leasedRemain { get; set; } [ProtoMember(10)] public int freeRemain { get; set; } [ProtoMember(11)] public int bookedRemain { get; set; } }
}