将这里生成的cs文件和工具箱中的protobuf-net.dll文件一起导入到Unity中,新建一个测试脚本开始序列化和反序列化测试。
using UnityEngine;
using item;
using System.IO;
using ProtoBuf;
public class Test : MonoBehaviour {
void Start () {
Item i = new Item();
i.Type = 1;i.num = 10;i.SubType = 2;
ItemList list = new ItemList();
list.item.Add(i);
byte[] data = Serialize(list);
Debug.LogError(data.Length);//8
ItemList ll = Deserialize<ItemList>(data);
Debug.LogError(ll.item[0].num);//10
}
byte[] Serialize(object o)
{
using (MemoryStream ms = new MemoryStream())
{
Serializer.Serialize(ms, o);
byte[] result = new byte[ms.Length];
ms.Read(result, 0, result.Length);
return result;
}
}
T Deserialize<T>(byte[] data)
{
using (MemoryStream ms = new MemoryStream(data))
{
T t = Serializer.Deserialize<T>(ms);
return t;
}
}
}
这里使用的Serializer是ProtoBuff命名空间里面的,主要使用它序列化数据在前面加上协议头(就是命令),然后传输过去给服务端,服务端根据协议头找到对应的结构(同一个.proto生成),反序列化(去除)数据
同样的,客户端也是根据服务端的协议头,找到对应的结构,在通过统一接口ProtoBuf反序列化取出数据。