当前位置:   article > 正文

【Unity学习笔记】在Unity中如何解析Json文件_unity 中json解析

unity 中json解析

声明:此篇文章是个人学习笔记,并非教程,所以内容可能不够严谨。可作参考,但不保证绝对正确。如果你发现我的文章有什么错误,非常欢迎指正,谢谢哦

JsonUtility

一、官方API:https://docs.unity3d.com/ScriptReference/JsonUtility.html

在Unity中使用JsonUtility类对Json进行解析,此类包含三个重要方法,下面进行详解。
在这里插入图片描述

二、FromJson方法(反序列化)

将Json转换为object

返回值是一个Object,需要在对应的类或结构体前标记Serializable属性(没标记好像也行 序列化不成功可能就是因为没有标记)。object类型必须支持序列化,其中的字段也必须支持序列化(比如私有类型、标记了NonSerialized属性的类型等不可序列化字段会被忽视)。

只有普通的类/结构体才行, 继承自UnityEngine.Object (比如 MonoBehaviour 或 ScriptableObject)的类则不行。

使用string的此函数可以在后台线程调用,但使用TextAsset的此函数只可以在主线程调用。

using UnityEngine;

[System.Serializable]
public class PlayerInfo
{
    public string name;
    public int lives;
    public float health;

    public static PlayerInfo CreateFromJSON(string jsonString)
    {
        return JsonUtility.FromJson<PlayerInfo>(jsonString);
    }

    // Given JSON input:
    // {"name":"Dr Charles","lives":3,"health":0.8}
    // this example will return a PlayerInfo object with
    // name == "Dr Charles", lives == 3, and health == 0.8f.
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

三、ToJson(序列化)

将object转换为Json

参数名作用
obj要转换为Json的object
prettyPrint如果为true,则格式化输出以确保可读性。如果为false,则将输出格式化为最小大小。默认值为false。

返回值是json格式的string。

传入的object必须是支持序列化的:这个object必须继承自MonoBehaviour、ScriptableObject(其他引擎类型使用EditorJsonUtility.Tojson),或者是标记Serializable属性的普通类/结构体。想要包含的字段也必须是支持序列化的,不支持序列化的字段如private、static以及标记了NonSerialized属性的字段等会被忽略。

传入的object不能是基本数据类型如int,float,也不能为数组。想要序列化基本数据类型或者数组,就需要将它们写入一个类或结构体中,再将类/结构体实例化的对象传入即可。

直接传入一个数组,序列化失败在这里插入图片描述在这里插入图片描述
将数组写进类中,将类实例化对象传入,序列化成功在这里插入图片描述在这里插入图片描述在这里插入图片描述

此函数可以在后台线程中执行,但此函数执行过程中不要去修改传入的object的值。

四、FromJsonOverwrite

此函数和FromJson非常类似,只有一点不同:此函数要把Json中的数据读入一个已经存在的对象中,覆盖该对象原来的数据。(FromJson是返回一个新创建的对象)

五、遇到不支持序列化的类型怎么办?

JsonUtilty类能力有限,并不能序列化/反序列化所有类型的数据,比如字典类型。这个时候就要实现Unity提供给我们的一个接口:ISerializationCallbackReceiver

具体说明见官方文档:https://docs.unity3d.com/cn/current/ScriptReference/ISerializationCallbackReceiver.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/123397
推荐阅读
相关标签
  

闽ICP备14008679号