Version: 2023.1

JsonUtility.FromJsonOverwrite

切换到手册
public static void FromJsonOverwrite (string json, object objectToOverwrite);

参数

json 对象的 JSON 表示形式。
objectToOverwrite 应覆盖的对象。

描述

通过读取对象的 JSON 表示形式覆盖其数据。

此方法非常类似于 JsonUtility.FromJson,只是它将 JSON 数据加载到现有对象中,而不是创建新对象并将 JSON 数据加载到其中。这样,无需进行任何分配即可更新存储在类或对象中的值。

在内部,此方法使用 Unity 序列化器;因此传入的对象必须受序列化器支持:它必须是 MonoBehaviour、ScriptableObject 或应用了 Serializable 属性的普通类/结构。要覆盖的字段的类型必须受序列化器支持;不受支持的字段以及私有字段、静态字段和应用了 NonSerialized 属性的字段会被忽略。

支持任何普通类或结构,以及派生自 MonoBehaviour 或 ScriptableObject 的类。不支持其他引擎类型。只能在 Editor 中使用 EditorJsonUtility.FromJsonOverwrite 覆盖其他引擎对象。

如果对象的某个字段没有 JSON 表示形式,则该字段保持不变。

此方法采用字符串的版本可以从后台线程进行调用。在函数运行期间,不应更改所覆盖的对象。此方法采用 TextAsset 的版本无法从后台线程进行调用。

using UnityEngine;

public class PlayerState : MonoBehaviour { public string playerName; public int lives; public float health;

public void Load(string savedData) { JsonUtility.FromJsonOverwrite(savedData, this); }

// Given JSON input: // {"lives":3, "health":0.8} // the Load function will change the object on which it is called such that // lives == 3 and health == 0.8 // the 'playerName' field will be left unchanged }