马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
目录
1.介绍
1.1 什么是Json
1.2 Json和其他数据序列化方案对比
1.3 为什么选择Newtonsoft.Json
2.安装Newtonsoft.json
2.1 网上其他安装方式
2.2 Unity下载匹配的版本
3.Newtonsoft.Json的利用
3.1 写一个Json工具类举行序列化和反序列化
3.2 举行测试
简单小结
1.介绍
1.1 什么是Json
Json全名为“JavaScript Object Notation”,直接翻译过来就是“JavaScript 对象表现法”。
Json最初由道格拉斯·克罗克福德(Douglas Crockford)在2001年提出,并在RFC 4627中正式定义。它的设计之初是提供一种易于阅读和编写的数据交换格式,同时也易于机器剖析和天生,用来作为XML的一种轻量级更换。
也就是说,Json并不属于一种编程语言,而是一种轻量级的数据交换格式。它的语法是基于JavaScript的,学习JavaScript的同学可以无缝利用,且由于语法的简单性,学习其他编程语言的同学也可以非常轻易上手。
1.2 Json和其他数据序列化方案对比
除了Json,我们知道另有XML、Protobuf、二进制等序列化方式,接下来我们就来举行一下平行对比
序列化文件巨细可读性跨语言跨平台性能易用性实用场景XML大高,包含所有层级结构和信息支持支持低复杂,像Excel一样逐节点查询配置文件、定义协议等Json较小较高,所有数据以键值对情势储存支持支持较高简单轻量级的数据存储和网络传输通讯Protobuf小低,不包含字段名等信息,且必要实用专门的工具举行反序列化支持支持高较复杂,必要本身定义Proto数据结构,但序列化反序列化过程简单高性能,低带宽的网络传输通讯二进制极小低,满是0和1二进制字节不支持不支持极高简单有加密需求的大规模网络传输通讯,数据存储等 1.3 为什么选择Newtonsoft.Json
Newtonsoft.Json(Json.NET)是.Net生态中最流行,利用最广的JSON库。Unity中常用的其他JSON工具,如System.Json、LitJson另有Unity自带的Jsonutility,或多或少都存在一切缺陷,比如不支持复杂数据结构范例,移动端平台不支持等。
相比其他的JSON工具,Newtonsoft.Json支持绝大多数平台。有着最丰富的功能和API,不浮夸的说,可以支持所有的数据结构范例,包括你自定义的数据结构范例,且序列化反序列化过程可定制。
与之相对的,Newtonsoft.Json的包体也会稍大,如果对包体的巨细不寻求极限的话,可以说Newtonsoft.Json就是你在Unity开发中利用Json的不二之选。
2.安装Newtonsoft.json
首先在你的Unity中建个脚本,using一下Newtonsoft.Json的命名空间,如果可以引用,表现你的Unity版本已经自带了Newtonsoft.Json,请直接跳到第三部门Newtonsoft.json的利用中,如果不行,请继承向下看
2.1 网上其他安装方式
网上很多教程都教你从Github下载.NET的Newtonsoft.Json,大概利用VS的Nuget包管理器举行安装,这些教程各人都可以在网上找到。
但是Newtonsoft.Json有着非常多的版本,支持差别的.NET情况和差别平台,且大部门都是不带AOT库的。你下载的库可能在Unity编译器和Windows下能正常利用,但是在移动端和主机端会碰到序列化失败的题目。
笔者这就教你一招取巧的方法,直接让Unity为我们下载好匹配的版本
2.2 Unity下载匹配的版本
找到你项目根路径下的Packages目录,Packages和你的Assets文件夹是同级的
打开manifest.json,找到com.unity.collab-proxy,可以看到如今的版本号是2.0.1
我们先去看一下刚才Packages目录下的packages-lock.json,可以看到如今的版本是2.0.1,dependencies依靠项是空的
接下来我们返回manifest.json,将com.unity.collab-proxy的版本号修改为1.15.4,像如许
返回Unity,就会弹出窗口重新天生packages了
这时间我们再看下packages-lock.json文件,可以看到版本号已经变为1.15.4了,且依靠里面多了Newtonsoft.Json
去Library中看一下,可以看到已经下载到包体了,且自带AOT库,支持所有的平台
这时间我们就可以在Unity中利用Newtonsoft.Json了
3.Newtonsoft.Json的利用
3.1 写一个Json工具类举行序列化和反序列化
- using Newtonsoft.Json; //记得引用命名空间
- public class JsonMgr
- {
- public static string Serialize<T>(T t)
- {
- return JsonConvert.SerializeObject(t);
- }
- public static T DeSerialize <T>(string json)
- {
- return JsonConvert.DeserializeObject<T>(json);
- }
- }
复制代码 3.2 举行测试
建一个弟子结构体,用来当测试的数据结构,包含学号,姓名,学习成绩三个成员字段
- public struct Student
- {
- public int num;
- public string name;
- public Dictionary<string, int> scoreDic;
- }
复制代码 建一个测试类,我们新建个弟子数据实例,就用大雄这小子举个栗子吧,我们都知道大雄的成绩不是很好哈~
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- public class JsonTest : MonoBehaviour
- {
- // Start is called before the first frame update
- void Start()
- {
- Student student = new Student()
- {
- num = 50,
- name = "野比大雄",
- scoreDic = new Dictionary<string, int>()
- {
- {"语文",10 },
- {"数学",5 },
- {"英语",8 },
- },
- };
- string json = JsonMgr.Serialize(student);
- Debug.Log(json);
- Student newStudent = JsonMgr.DeSerialize<Student>(json);
- Debug.Log(newStudent.num);
- Debug.Log(newStudent.name);
- Debug.Log(newStudent.scoreDic["语文"]);
- }
- }
复制代码 看一下输出,可以看到序列化和反序列化都没什么题目
简单小结
怎么样呢,用起来是不是很简单,各人也可以本身用一些复杂数据结构试试。必要注意的是,默认情况下,数据中的非公共字段,如Private、Protected等访问修饰符修饰的字段是不会被序列化的。
下一节,我将教各人一些Newtonsoft.Json序列化反序列时的自定义设置:
Unity中Newtonsoft.Json的利用(二)
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |