Unity使用protobuf-net进行二进制序列化与反序列化
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(, IsRequired = true)]
public Dictionary<int, int> Dictionary { get; set; } // 必须带有无参数默认构造函数
public Example()
{
Dictionary = new Dictionary<int, int>();
}
}
Unity使用protobuf-net进行二进制序列化与反序列化的更多相关文章
- C#二进制序列化和反序列化
public class WRSerializable { public static void SerializeToFile<T>(T _description, string _fi ...
- C#高性能二进制序列化
二进制序列化可以方便快捷的将对象进行持久化或者网络传输,并且体积小.性能高,应用面甚至还要高于json的序列化:开始之前,先来看看dotcore/dotne自带的二进制序列化:C#中对象序列化和反序列 ...
- 线程安全使用(四) [.NET] 简单接入微信公众号开发:实现自动回复 [C#]C#中字符串的操作 自行实现比dotcore/dotnet更方便更高性能的对象二进制序列化 自已动手做高性能消息队列 自行实现高性能MVC WebAPI 面试题随笔 字符串反转
线程安全使用(四) 这是时隔多年第四篇,主要是因为身在东软受内网限制,好多文章就只好发到东软内部网站,懒的发到外面,现在一点点把在东软写的文章给转移出来. 这里主要讲解下CancellationT ...
- C#对象序列化与反序列化zz
C#对象序列化与反序列化(转载自:http://www.cnblogs.com/LiZhiW/p/3622365.html) 1. 对象序列化的介绍........................ ...
- C#对象序列化与反序列化
C#对象序列化与反序列化(转载自:http://www.cnblogs.com/LiZhiW/p/3622365.html) 1. 对象序列化的介绍.......................... ...
- [转载]C#对象序列化与反序列化
文章写的实在是太好了,忍不住转来: http://www.cnblogs.com/LiZhiW/p/3622365.html#_Toc8478 1.对象序列化的介绍 (1).NET支持对象序列化的几种 ...
- 序列化与反序列化Serialize&Deserialize
序列化是指一个对象的实例可以被保存,保存成一个二进制串,当然,一旦被保存成二进制串,那么也可以保存成文本串了.比如,一个计数器,数值为2,我们可以用字符串“2”表示.如果有个对象,叫做connter, ...
- .net 中序列化和反序列化的使用
序列化的目的:将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储和传输数据. 序列化 序列化分为JSON 序列化,XML序列化,二 ...
- C#序列化与反序列化以及深拷贝浅拷贝
基于二进制数据流的序列化和反序列化 /// <summary> /// 序列化 /// </summary> /// <typeparam name="T&qu ...
随机推荐
- JAVA类与对象
Employee类: public class EmployeeTest { public static void main(String[] args) { // fill the staff ar ...
- 原生JS实现购物车功能
html <div class="catbox"> <table id="cartTable"> <thead> <t ...
- 转载:[AngularJS系列] 那伤不起的provider们啊~ (Provider, Value, Constant, Service, Factory, Decorator)
来源:http://hellobug.github.io/blog/angularjs-providers/ 用AngularJS做项目,但凡用过什么service啊,factory啊,provide ...
- img的onerror事件(瑕疵+解决办法)【转】
显示图片的时候,为了更好的用户体验,可能会把一些没有图片的内容也用图片样式显示出来,此时我们就要用到IMG的onerror事件了,注意MyEclipse的快捷键alt+/是没有的. < img ...
- SQLSERVER2008R2数据库的整体导出及单个表的导出步骤
今天在同事导SQLSERVER数据库中的表的时候遇到一问题,不知道怎么单独的把一个表的建表语句导出来,,迅速百度一下,按照步骤还真导出来了,导出单个表的步骤看下面来啦....: 点中数据库名字---- ...
- qt 编译问题总结
1)使用make命令编译Qt原码时出现了 /usr/bin/ld: cannot find -lXrender 问题: /usr/bin/ld: cannot find -lXrender ...
- 使用R进行地图相关的可视化
Here is a solution using the geosphere and maps package. Using the gcIntermediate function you can & ...
- Debian/Ubuntu/CentOS VPS安装Net-Speeder并优化
安装过程: CentOS安装 wget --no-check-certificate https://gist.github.com/LazyZhu/dc3f2f84c336a08fd6a5/raw/ ...
- yii2.0 Activeform表单部分组件使用方法
文本框:textInput(); 密码框:passwordInput(); 单选框:radio(),radioList(); 复选框:checkbox(),checkboxList(); 下拉框:dr ...
- 学习日记-发布第一篇WordPress
配置WordPress 1.安装XAMPP https://www.apachefriends.org/zh_cn/index.html 2.下载最新版WordPress 解压至XAMPP安装路径下. ...