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进行二进制序列化与反序列化的更多相关文章

  1. C#二进制序列化和反序列化

    public class WRSerializable { public static void SerializeToFile<T>(T _description, string _fi ...

  2. C#高性能二进制序列化

    二进制序列化可以方便快捷的将对象进行持久化或者网络传输,并且体积小.性能高,应用面甚至还要高于json的序列化:开始之前,先来看看dotcore/dotne自带的二进制序列化:C#中对象序列化和反序列 ...

  3. 线程安全使用(四) [.NET] 简单接入微信公众号开发:实现自动回复 [C#]C#中字符串的操作 自行实现比dotcore/dotnet更方便更高性能的对象二进制序列化 自已动手做高性能消息队列 自行实现高性能MVC WebAPI 面试题随笔 字符串反转

    线程安全使用(四)   这是时隔多年第四篇,主要是因为身在东软受内网限制,好多文章就只好发到东软内部网站,懒的发到外面,现在一点点把在东软写的文章给转移出来. 这里主要讲解下CancellationT ...

  4. C#对象序列化与反序列化zz

      C#对象序列化与反序列化(转载自:http://www.cnblogs.com/LiZhiW/p/3622365.html) 1. 对象序列化的介绍........................ ...

  5. C#对象序列化与反序列化

    C#对象序列化与反序列化(转载自:http://www.cnblogs.com/LiZhiW/p/3622365.html) 1. 对象序列化的介绍.......................... ...

  6. [转载]C#对象序列化与反序列化

    文章写的实在是太好了,忍不住转来: http://www.cnblogs.com/LiZhiW/p/3622365.html#_Toc8478 1.对象序列化的介绍 (1).NET支持对象序列化的几种 ...

  7. 序列化与反序列化Serialize&Deserialize

    序列化是指一个对象的实例可以被保存,保存成一个二进制串,当然,一旦被保存成二进制串,那么也可以保存成文本串了.比如,一个计数器,数值为2,我们可以用字符串“2”表示.如果有个对象,叫做connter, ...

  8. .net 中序列化和反序列化的使用

    序列化的目的:将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储和传输数据. 序列化 序列化分为JSON 序列化,XML序列化,二 ...

  9. C#序列化与反序列化以及深拷贝浅拷贝

    基于二进制数据流的序列化和反序列化 /// <summary> /// 序列化 /// </summary> /// <typeparam name="T&qu ...

随机推荐

  1. JavaScript模块化

    1.commonjs 导入: var math = require('math'); math.add(2,3); // 5 导出: module.exports={} 应用会停止并等待加载 2.AM ...

  2. eclipse启动报错java.lang.IllegalStateException: LifecycleProcessor not initialized - call 'refresh' befo

    报错: java.lang.IllegalStateException: LifecycleProcessor not initialized - call 'refresh' before invo ...

  3. occ 中绘制二维矩形

    在屏幕上绘制一个二级矩形 #include <Visual3d_Layer.hxx> #include <V3d_LayerMgr.hxx> #include <Visu ...

  4. CentOS_7.2安装Nginx_1.9

    一.安装依赖包和开发工具: yum install vim vim-enhanced wget zip unzip telnet ntsysv compat* apr* nasm* gcc gcc* ...

  5. vue新建项目

    一直都被如何用vue.js新建一个项目的问题困扰着,经过好久的实践,终于搞清楚如何用vue新建项目了: 1.官网对于vue-cli介绍: Vue.js provides an official CLI ...

  6. Office2010与vs2008不兼容导致的一系列问题(vs设计视图打不开,无法启动Asp.Net Development Server)

    vs2008打开aspx文件时设计界面死机的解决 一.突然有一天,在使用vs2008从源视图向设计视图切换时,界面出现了假死现象,重装后亦无效.我从网上搜索原因,发现很多朋友都有类似的问题,但解决方案 ...

  7. silk mpu

    #include "mpu.h" #include "mbuf.h" #include "media_buffer.h" #include ...

  8. MIUI5(红米、小米)打开开发者模式

    在miui5系统中系统默认隐藏原生android的开发者模式选项,要想启动该模式需要按照以下操作: 设置-关于手机- 连续点击安卓版本4下. 然后再返回主设置页面下,你会发现开发者选项已经出现.

  9. UDP传输

    @@@基于UDP的客服端代码 public class Service { // 服务器 public static void main(String[] args) { DatagramPacket ...

  10. [转载]GlassFish 的安装及设置命令

    移步: http://blog.csdn.net/joyous/article/details/8008870