using System;
using System.IO;
namespace CsharpProtobuf
{
class Program
{
static void Main(string[] args)
{
YjzMessage.Vector2f pos = new YjzMessage.Vector2f();
pos.Id = 60000; pos.PosX = 100.02f; pos.PosZ = 52.3f;
pos.State = 1;
byte[] data = Tools.Serializer(pos); //将类序列话成字节数组
Console.WriteLine("序列化之后的长度 = " + data.Length);
var Pos1 = Tools.Deserialization<YjzMessage.Vector2f>(data); //将字节数组反序列化成类
if (Pos1 != null)
{
string str = string.Format("ID = {0} PosX = {1} PosZ = {2} State = {3}", Pos1.Id, Pos1.PosX, Pos1.PosZ, pos.State);
Console.WriteLine(str);
}
Console.ReadKey();
}
}
public static class Tools
{
/// <summary>
/// 反序列化
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="data"></param>
/// <returns></returns>
public static T Deserialization<T>(byte[] data)
{
using (MemoryStream ms = new MemoryStream())
{
ms.Write(data, 0, data.Length);
ms.Position = 0;
return ProtoBuf.Serializer.Deserialize<T>(ms);
}
}
/// <summary>
/// 序列化
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="data"></param>
/// <returns></returns>
public static byte[] Serializer<T>(T data)
{
using (MemoryStream ms = new MemoryStream())
{
ProtoBuf.Serializer.Serialize(ms, data);
ms.Position = 0;
byte[] DataBuffer = new byte[ms.Length];
ms.Read(DataBuffer, 0, DataBuffer.Length);
return DataBuffer;
}
}
}
}
namespace YjzMessage
{
[ProtoBuf.ProtoContract] //标志这个类可以被序列化
public class Vector2f
{
[ProtoBuf.ProtoMember(1)] //字段的表示 不能重复
public int Id { get; set; }
[ProtoBuf.ProtoMember(2)]
public float PosX { get; set; }
[ProtoBuf.ProtoMember(3)]
public float PosZ { get; set; }
[ProtoBuf.ProtoMember(4)]
public int State { get; set; }
}
}
using System.IO;
namespace CsharpProtobuf
{
class Program
{
static void Main(string[] args)
{
YjzMessage.Vector2f pos = new YjzMessage.Vector2f();
pos.Id = 60000; pos.PosX = 100.02f; pos.PosZ = 52.3f;
pos.State = 1;
byte[] data = Tools.Serializer(pos); //将类序列话成字节数组
Console.WriteLine("序列化之后的长度 = " + data.Length);
var Pos1 = Tools.Deserialization<YjzMessage.Vector2f>(data); //将字节数组反序列化成类
if (Pos1 != null)
{
string str = string.Format("ID = {0} PosX = {1} PosZ = {2} State = {3}", Pos1.Id, Pos1.PosX, Pos1.PosZ, pos.State);
Console.WriteLine(str);
}
Console.ReadKey();
}
}
public static class Tools
{
/// <summary>
/// 反序列化
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="data"></param>
/// <returns></returns>
public static T Deserialization<T>(byte[] data)
{
using (MemoryStream ms = new MemoryStream())
{
ms.Write(data, 0, data.Length);
ms.Position = 0;
return ProtoBuf.Serializer.Deserialize<T>(ms);
}
}
/// <summary>
/// 序列化
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="data"></param>
/// <returns></returns>
public static byte[] Serializer<T>(T data)
{
using (MemoryStream ms = new MemoryStream())
{
ProtoBuf.Serializer.Serialize(ms, data);
ms.Position = 0;
byte[] DataBuffer = new byte[ms.Length];
ms.Read(DataBuffer, 0, DataBuffer.Length);
return DataBuffer;
}
}
}
}
namespace YjzMessage
{
[ProtoBuf.ProtoContract] //标志这个类可以被序列化
public class Vector2f
{
[ProtoBuf.ProtoMember(1)] //字段的表示 不能重复
public int Id { get; set; }
[ProtoBuf.ProtoMember(2)]
public float PosX { get; set; }
[ProtoBuf.ProtoMember(3)]
public float PosZ { get; set; }
[ProtoBuf.ProtoMember(4)]
public int State { get; set; }
}
}