Unity中Newtonsoft.Json的使用(一)

目录

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的使用中,如果不行,请继续向下看

using 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的使用(二)

Unity2019是款非常流行的游戏开发引擎,而Newtonsoft.Json.dll是个非常常用的Json处理库。Newtonsoft.Json.dll可以帮助我们在Unity2019中进行Json数据的序列化和反序列化操作。 在Unity2019中,使用Newtonsoft.Json.dll可以非常方便地将对象转换为Json格式的字符串,或者将Json格式的字符串转换为对象。这对于网络通信、存储数据或者配置文件的读写等场景非常有用。 使用Newtonsoft.Json.dll进行序列化时,我们可以使用些属性来控制Json的生成方式,比如可以指定属性的命名规则、设置日期格式化方式、对空值进行处理等等。这些属性可以帮助我们更好地控制和优化Json数据的生成过程。 在反序列化方面,使用Newtonsoft.Json.dll可以帮助我们将Json格式的字符串快速地转换为对应的对象。我们可以使用些特性来指定如何解析Json数据,比如可以使用JsonProperty来指定Json字段与对象属性之间的映射关系。 除了基本的序列化和反序列化功能之外,Newtonsoft.Json.dll还提供了些高级功能,比如将对象序列化为Xml格式、处理动态类型、处理匿名类型等等。这些功能可以帮助我们更加灵活地处理Json数据。 总之,Unity2019中使用Newtonsoft.Json.dll可以帮助我们方便地进行Json数据的处理,节省了我们自己编写Json解析代码的时间和精力,提高了开发效率。它是Unity开发中不可或缺的重要工具之
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值