概述
Protocol Buffer是Google开发的数据格式,也是除了XML和JSON之外人气第三高的^^需要的朋友可以参考下
首先来说一下本文中例子所要实现的功能:
- 基于ProtoBuf序列化对象
下面来看具体的步骤:
Unity中使用ProtoBuf
导入DLL到Unity中,
创建网络传输的模型类:
using System;
using ProtoBuf;
//添加特性,表示可以被ProtoBuf工具序列化
[ProtoContract]
public class NetModel {
//添加特性,表示该字段可以被序列化,1可以理解为下标
[ProtoMember(1)]
public int ID;
[ProtoMember(2)]
public string Commit;
[ProtoMember(3)]
public string Message;
}
using ProtoBuf;的引用需要使用protobuf-net.dll动态链接库文件
将这个DLL文件放入Plugins文件夹下就行
整个示例代码如下:
using UnityEngine;
using System;
using ProtoBuf;
using System.IO;
using System.Collections;
//添加特性,表示可以被ProtoBuf工具序列化
[ProtoContract]
public class NetModel {
//添加特性,表示该字段可以被序列化,1可以理解为下标
[ProtoMember(1)]
public int ID;
[ProtoMember(2)]
public string Commit;
[ProtoMember(3)]
public string Message;
}
public class ProtocolBuffer : MonoBehaviour {
// Use this for initialization
void Start () {
Test ();
}
void Test()
{
//创建对象
NetModel item = new NetModel(){ID = 1, Commit = "LanOu", Message = "Unity"};
//序列化对象
byte[] temp = Serialize(item);
//ProtoBuf的优势一:小
Debug.Log(temp.Length);
//反序列化为对象
NetModel result = DeSerialize(temp);
Debug.Log(result.Message);
}
// 将消息序列化为二进制的方法
// < param name="model">要序列化的对象< /param>
private byte[] Serialize(NetModel model)
{
try {
//涉及格式转换,需要用到流,将二进制序列化到流中
using (MemoryStream ms = new MemoryStream()) {
//使用ProtoBuf工具的序列化方法
ProtoBuf.Serializer.Serialize<NetModel> (ms, model);
//定义二级制数组,保存序列化后的结果
byte[] result = new byte[ms.Length];
//将流的位置设为0,起始点
ms.Position = 0;
//将流中的内容读取到二进制数组中
ms.Read (result, 0, result.Length);
return result;
}
} catch (Exception ex) {
Debug.Log ("序列化失败: " + ex.ToString());
return null;
}
}
// 将收到的消息反序列化成对象
// < returns>The serialize.< /returns>
// < param name="msg">收到的消息.</param>
private NetModel DeSerialize(byte[] msg)
{
try {
using (MemoryStream ms = new MemoryStream()) {
//将消息写入流中
ms.Write (msg, 0, msg.Length);
//将流的位置归0
ms.Position = 0;
//使用工具反序列化对象
NetModel result = ProtoBuf.Serializer.Deserialize<NetModel> (ms);
return result;
}
} catch (Exception ex) {
Debug.Log("反序列化失败: " + ex.ToString());
return null;
}
}
}
最后
以上就是鲜艳手机为你收集整理的C#使用Protocol Buffer(ProtoBuf)进行对象的序列化与反序列化的全部内容,希望文章能够帮你解决C#使用Protocol Buffer(ProtoBuf)进行对象的序列化与反序列化所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复