Unity中Newtonsoft.Json的使用(一)

这篇具有很好参考价值的文章主要介绍了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文件夹是同级的

unity newtonsoft,Unity第三方插件,unity,json

打开manifest.json,找到com.unity.collab-proxy,可以看到现在的版本号是2.0.1

unity newtonsoft,Unity第三方插件,unity,json

我们先去看一下刚才Packages目录下的packages-lock.json,可以看到现在的版本是2.0.1,dependencies依赖项是空的

unity newtonsoft,Unity第三方插件,unity,json

接下来我们返回manifest.json,将com.unity.collab-proxy的版本号修改为1.15.4,像这样

unity newtonsoft,Unity第三方插件,unity,json

返回Unity,就会弹出窗口重新生成packages了

unity newtonsoft,Unity第三方插件,unity,json

这时候我们再看下packages-lock.json文件,可以看到版本号已经变为1.15.4了,且依赖里面多了Newtonsoft.Json

unity newtonsoft,Unity第三方插件,unity,json

去Library中看一下,可以看到已经下载到包体了,且自带AOT库,支持所有的平台

unity newtonsoft,Unity第三方插件,unity,json

这时候我们就可以在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["语文"]);
    }
}

看一下输出,可以看到序列化和反序列化都没什么问题

unity newtonsoft,Unity第三方插件,unity,json

简单小结

怎么样呢,用起来是不是很简单,大家也可以自己用一些复杂数据结构试试。需要注意的是,默认情况下,数据中的非公共字段,如Private、Protected等访问修饰符修饰的字段是不会被序列化的。

下一节,我将教大家一些Newtonsoft.Json序列化反序列时的自定义设置:

Unity中Newtonsoft.Json的使用(二)文章来源地址https://www.toymoban.com/news/detail-845671.html

到了这里,关于Unity中Newtonsoft.Json的使用(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Unity 数据读取|(四)Json文件解析(Newtonsoft.Json ,Litjson,JsonUtility,SimpleJSON)

    JSON文件是一种纯文本文件,用于存储数据,并且是基于JavaScript的一个子集。JSON文件通常用于存储和传输数据,以及在应用程序之间交换信息。它们以键值对的形式存储数据,其中键是字符串,值可以是字符串、数字、布尔值、数组、对象或null。 JSON文件通常具有.json扩展名

    2024年02月05日
    浏览(11)
  • 使用Newtonsoft直接读取Json格式文本(Linq to Json)

    使用 Newtonsoft.Json(通常简称为 Newtonsoft)可以轻松地处理 JSON 格式的文本。Newtonsoft.Json 是 .NET 中一个流行的 JSON 处理库,它提供了丰富的功能和灵活性。 以下是使用 Newtonsoft.Json 进行 Linq to JSON 的示例代码: 首先,你需要在项目中安装 Newtonsoft.Json 包。你可以通过 NuGet 包管理

    2024年02月16日
    浏览(8)
  • C# Newtonsoft.Json解析json到自定义实体类

    使用Newtonsoft.Json解析json到自定义实体类也很方便,关键点在于实体类定义属性的时候加上JsonProperty标签。最简单的一种形式可以形如这样: JsonProperty后面括弧里的字串即代表json中对应的属性名称。通过这种方式即可关联json属性和实体类属性。 调用的时候也很简单, 这样就

    2024年02月20日
    浏览(12)
  • CYQ.Data 操作 Json 性能测试:对比 Newtonsoft.Json

    CYQ.Data 操作 Json 性能测试:对比 Newtonsoft.Json

    在 CYQ.Data 版本更新的这么多年,中间过程的版本都在完善各种功能。 基于需要支持或兼容的代码越多,很多时候,常规思维,都把相关功能完成,就结束了。 实现过程中,无法避免的会用到大量的反射、锁等对性能有所影响的逻辑代码。 CYQ.Data 从V5.9 版本开始,开始大规

    2024年03月18日
    浏览(14)
  • Newtonsoft.Json/Json.NET忽略序列化时的意外错误

    在.NET中Newtonsoft.Json(Json.NET)是我们常用来进行Json序列化与反序列化的库。 而在使用中常会遇到反序列化Json时,遇到不规则的Json数据解构而抛出异常。 Newtonsoft.Json 支持序列化和反序列化过程中的错误处理。 允许您捕获错误并选择是处理它并继续序列化,还是让错误冒泡并抛

    2024年03月21日
    浏览(13)
  • unity 要怎么引用第三方库,直接用useing不?

    在Unity中引用第三方库的常见方法是使用 Assembly Definition Files(程序集定义文件) 。 这是一种Unity提供的机制,允许您创建自己的程序集,以便在Unity项目中引用和使用第三方库。以下是一些简单的步骤: 在Unity编辑器中,右键点击您的Assets文件夹,选择 Create    Assembly Defi

    2024年02月07日
    浏览(10)
  • 【第三方SDK接入汇总】Unity接入VuforiaAR(图片识别)

    【第三方SDK接入汇总】Unity接入VuforiaAR(图片识别)

    目录 一.注册Vuforia账号 二.获取许可秘钥 三.获取Vuforia的SDK导入unity 四.搭建创建AR场景 五.打包到手机 注册地址:Engine Developer Portal 申请地址:https://developer.vuforia.com/vui/develop/licenses 方式一: 官网下载 下载地址:SDK Download | Engine Developer Portal  下载后把package包导入unity即可。

    2024年04月08日
    浏览(17)
  • 微信小程序第三方平台uni-app配置ext.json(超详细)

    微信小程序第三方平台uni-app配置ext.json(超详细)

    假如说,有多个业务,功能模式相同的公众号/小程序,如果只是小程序开发,那是不是需要复制多套代码,改appid信息,在微信公众号后台,配置域名服务器以及密钥等繁琐的信息,每改一个提交发布一次,进行重复的步骤。随着要维护的公众号/小程序数量逐步增加,需要投

    2024年02月03日
    浏览(54)
  • Python第三方库安装——使用vscode、pycharm安装Python第三方库

    Python第三方库安装——使用vscode、pycharm安装Python第三方库

    在这里介绍vscode、Pycharm安装python第三方库的方法。 操作系统:windows10 专业版 环境如下: Pycharm Comunity 2022.3 Visual Studio Code 2019 Python 3.8 pip:23.0.1 pycharm是一款很强大的、专用于写python的ide。 小白式安装第三方库往往能给初学者一种 “高级感” ,而对于使用惯了Linux的人而言

    2024年02月03日
    浏览(62)
  • Vue第三方组件使用

    Vue第三方组件使用

    1、父组件与孩子组件传值 在孩子组件中定义props属性,里面定义好用于接收父亲数据的变量。 孩子组件是Movie Movie.vue。注意看在Movie组件里面有props对象中的title和rating属性用于父亲使用。 在父亲组件中使用孩子组件,使用时传入参数。 比如我在App.vue里面使用孩子组件时如

    2024年04月10日
    浏览(145)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包