版本:Unity 6 (6000.0)
语言英语
  • C#

JsonUtility.FromJsonOverwrite

提出变更建议

成功!

感谢您帮助我们提高 Unity 文档的质量。尽管我们无法接受所有提交内容,但我们确实会阅读用户提出的每条变更建议,并视情况进行更新。

关闭

提交失败

由于某种原因,您建议的变更无法提交。请在几分钟后<a>重试</a>。感谢您花时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

public static void FromJsonOverwrite(string json, object objectToOverwrite);

参数

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

说明

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

此方法与 JsonUtility.FromJson 非常相似,但它不会创建一个新对象并将其加载到 JSON 数据中,而只会将 JSON 数据加载到现有对象中。这使得您能够在没有分配的情况下更新存储在类或对象中的值。

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

除了派生自 MonoBehaviour 或 ScriptableObject 的类,还支持任何普通类或结构。不支持其他引擎类型。仅在编辑器中,您可以使用 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 }