unity 序列化和反序列化
什么是序列化和反序列化
(1)序列化是指把对象转换为字节序列的过程,而反序列化是指把字节序列恢复为对象的过程;.
(2)序列化:对象序列化的最主要的用处就是在传递和保存对象的时候,保证对象的完整性和可传递性。序列化是把对象转换成有序字节流,以便在网络上传输或者保存在本地文件中。序列化后的字节流保存了对象的状态以及相关的描述信息。序列化机制的核心作用就是对象状态的保存与重建。
(3)反序列化:客户端从文件中或网络上获得序列化后的对象字节流后,根据字节流中所保存的对象状态及描述信息,通过反序列化重建对象
(4)本质上讲,序列化就是把实体对象状态按照一定的格式写入到有序字节流,反序列化就是从有序字节流重建对象,恢复对象状态。
2、为什么需要序列化与反序列化
我们知道,当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本、图片、音频、视频等, 而这些数据都会以二进制序列的形式在网络上传送。
那么当两个进程进行通信时,能否实现进程间的对象传送呢?答案是可以的!如何做到呢?这就需要序列化与反序列化了!
换句话说,一方面,发送方需要把这个对象转换为字节序列,然后在网络上传送;另一方面,接收方需要从字节序列中恢复出对象。
当我们明晰了为什么需要Java序列化和反序列化后,我们很自然地会想序列化的好处。其好处一是实现了数据的持久化,通过序列化可以把数据永久地保存到硬盘上(通常存放在文件里),二是,利用序列化实现远程通信,即在网络上传送对象的字节序列。
总的来说可以归结为以下几点:
(1)永久性保存对象,保存对象的字节序列到本地文件或者数据库中;
(2)通过序列化以字节流的形式使对象在网络中进行传递和接收;
(3)通过序列化在进程间传递对象;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using Newtonsoft.Json; public class TestJSON : MonoBehaviour
{ void Start()
{ Product product = new Product();
product.dic["键"] = "值";
product.name = "小明";
string json = JsonConvert.SerializeObject(product); Product m = JsonConvert.DeserializeObject<Product>(json); Debug.Log(json);
Debug.Log(m.name);
} public class Product
{
public string name;
public Dictionary<string, string> dic = new Dictionary<string, string>();
} }
TestJSON
需要导入命名空间
using System.IO;
using System.Xml.Serialization;
using UnityEditor; 先定义一个类:
public class Studnet{
public string m_Name = "仑仑";
} public class SerializeDemo : MonoBehaviour { void Start()
{
序列化:
Student student = new Student();
//第一要确定储存的位置
//Application.dataPath就是unity中的Asset文件夹
StreamWriter sw = new StreamWriter(Application.dataPath + "/Demo.xml");
//第二要对什么类型序列化
XmlSerializer xs = new XmlSerializer(typeof(Student));
//第三对对象序列化
xs.Serialize(sw, student);
//关闭流
sw.Close();
//刷新Asset文件
AssetDatabase.Refresh();
//运行程序会在Asset目录下看到Demo.xml文件 反序列化
//第一确定对哪个文件进行反序列化
StreamReader sr = new StreamReader(Application.dataPath + "/Demo.xml");
//第二要确定对什么类型反序列化
XmlSerializer xs1 = new XmlSerializer(typeof(Student));
//第三反序列化
Student student1 = xs1.Deserialize(sr) as Student;
//关闭流
sr.Close();
//会在控制台看到 “仑仑”
print(student1.m_Name);
}
}
SerializeDemo
unity 序列化和反序列化的更多相关文章
- Unity 用JSON库序列化与反序列化类,字典
Unity自己的json序列化是不支持字典格式的,但是 json .net库,功能很强大,还支持序列化字典. 下载地址:https://download.csdn.net/download/qq_15 ...
- unity探索者之protobuf的序列化和反序列化导致unity崩溃的问题研究
版权声明:本文为原创文章,转载请声明http://www.cnblogs.com/unityExplorer/p/7574569.html 这两天博主在接微信支付SDK的时候碰到一个非常恶心又诡异的问 ...
- Unity中进程间通信——使用Protobuf-net序列化与反序列化
基于ProtoBuf协议实现网络传输(上) Protobuf 全称Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格 ...
- Unity 序列化 总结
查找了 Script Serialization http://docs.unity3d.com/Manual/script-Serialization.html 自定义序列化及例子: http:// ...
- 迄今为止 .Net 平台功能最强大,性能最佳的 JSON 序列化和反序列化库。
Swifter.Json 这是迄今为止 .Net 平台功能最强大,性能最佳的 JSON 序列化和反序列化库. Github : https://github.com/Dogwei/Swifter.Js ...
- C#实现json的序列化和反序列化
在做asp.net和unity进行http通信的时候,当unity客户端发出表单请求的时候,我要将他要请求的数据以json的格式返回给客户端,让客户端来解析.服务器端这一块就涉及到json的序列化和反 ...
- [asp.net]C#实现json的序列化和反序列化
在做asp.net和unity进行http通信的时候,当unity客户端发出表单请求的时候,我要将他要请求的数据以json的格式返回给客户端,让客户端来解析.服务器端这一块就涉及到json的序列化和反 ...
- unity序列化
什么是序列化 unity的序列化在unity的开发中起着举重足轻的地位,许多核心的功能都是基于序列化和反序列化来实现的.序列化简单来讲就是就是将我们所要保存的数据进行二进制存储,然后当我们需要的时候, ...
- C# 序列化与反序列化几种格式的转换
这里介绍了几种方式之间的序列化与反序列化之间的转换 首先介绍的如何序列化,将object对象序列化常见的两种方式即string和xml对象; 第一种将object转换为string对象,这种比较简单没 ...
随机推荐
- OpenCL 矢量存取
▶ 函数 vloadn 和 vstoren 来实现全局存储器和局部存储器之间的向量拷贝 ● 代码 #include <stdio.h> #include <stdlib.h> ...
- 3.Ehcache中储存缓存的方式
转自:https://www.cnblogs.com/crazylqy/p/4238148.html 目录 1 堆内存(MemoryStore) 1.1 指定可用内存 1.2 ...
- VB.NET 指针
在.NET中,对指针指向数据的存储函数都封装在marshal类中,主要的函数包括:Copy.PtrToStringUni .PtrToStructure .OffsetOf.WriteXXX,Rrea ...
- VUE项目 - IE报vuex requires a Promise polyfill in this browser问题解决
第一步: 安装 babel-polyfill . babel-polyfill可以模拟ES6使用的环境,可以使用ES6的所有新方法 npm install --save babel-polyfill ...
- [译]2D空间中使用四叉树Quadtree进行碰撞检测优化
操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Unity2017.2.0f3 原文出处 : Quick Tip: Use Quadtrees to Detect Lik ...
- Java调用SQL Server的存储过程详解
转载自Microsoft的官方文档 http://msdn2.microsoft.com/zh-cn/library/ms378995.aspx收录于 www.enjoyjava.net/f25 本文 ...
- 基于jquery-ui及bootstrap的可拖拽模态框
可直接使用代码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <t ...
- mysql 搜索字段不包含数字
select a.REG_CN_NAME,a.REG_NUM,a.INT_CLS from T_FENFA_43_TM_HOLDERINFO a where a.REG_CN_NAME NOT RE ...
- centos 使用windows7 存储
1. 在Windows7上创建一个带密码的用户,如disk 2. 创建一个文件夹,如 D:\centos-disk2 3. 选中此文件夹,点击上方的 共享 -> 特定用户, 添加disk用户, ...
- 非root用户使用1024以下端口
如果你有一个最新的内核,确实有可能使用它作为非root用户启动服务,但绑定低端口.最简单有效的办法是: #setcap 'cap_net_bind_service=+ep' /path/to/pr ...