您的位置:首页 > 移动开发 > Unity3D

Unity使用protobuf-net进行二进制序列化与反序列化

2016-06-21 21:50 716 查看
Protobuf-net提供的一种易于使用的数据序列化方案,可序列化带有[ProtoContract]特性的类实例,并可支持Unity各个发布平台,且效率高、易用性强。

public static class Serialization
{
public static byte[] Serialize<T>(T instance)
{
byte[] bytes;
using (var ms = new MemoryStream())
{
Serializer.Serialize(ms, instance);
bytes = new byte[ms.Position];
var fullBytes = ms.GetBuffer();
Array.Copy(fullBytes, bytes, bytes.Length);
}
return bytes;
}

public static T Deserialize<T>(object obj)
{
byte[] bytes = (byte[]) obj;
using (var ms = new MemoryStream(bytes))
{
return Serializer.Deserialize<T>(ms);
}
}
}


以下为需要进行序列化的类定义示例。

[ProtoContract]
public class Example
{
// Protobuf 要求
// 不带 [ProtoMember] C#特性的成员其值将不被序列化
// IsRequired 是可选的
// 如成员是自定义类对象,即该类是嵌套类,序号必须与类成员对象中的第一个成员序号相同
// 若将所有自定义类成员在该类中展开,不能存在相同的序号

public int ClassName { get; set; }

[ProtoMember(1, IsRequired = true)]
public Dictionary<int, int> Dictionary { get; set; }

// 必须带有无参数默认构造函数
public Example()
{
Dictionary = new Dictionary<int, int>();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: