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

JsonUtility.ToJson

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交内容,但我们确实会阅读用户提出的每一项建议更改,并在适用时进行更新。

关闭

提交失败

由于某种原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

public static string ToJson(object obj);

声明

public static string ToJson(object obj, bool prettyPrint);

参数

obj 要转换为 JSON 格式的对象。
prettyPrint 如果为 true,则格式化输出以提高可读性。如果为 false,则格式化输出以使大小最小化。默认值为 false。

返回值

string 该对象的 JSON 格式数据。

描述

生成对象的公共字段的 JSON 表示形式。

在内部,此方法使用 Unity 序列化器;因此,您传入的对象必须受序列化器支持:它必须是 MonoBehaviour、ScriptableObject 或带有 Serializable 属性的普通类/结构体。您想要包含的字段类型必须受序列化器支持;不受支持的字段将被忽略,私有字段、静态字段和带有 NonSerialized 属性的字段也将被忽略。

任何普通类或结构体都受支持,以及从 MonoBehaviour 或 ScriptableObject 派生的类。其他引擎类型不受支持。(仅在编辑器中,您可以使用 EditorJsonUtility.ToJson 将其他引擎类型序列化为 JSON)。

如果对象包含对其他 Unity 对象的引用字段,则这些引用通过记录每个被引用对象的 InstanceID 来序列化。由于 Instance ID 充当内存中对象实例的句柄,因此 JSON 字符串只能在 Unity 引擎的同一会话期间反序列化回。

请注意,虽然可以将基本类型传递给此方法,但结果可能与您预期不同;该方法不会直接序列化它们,而是会尝试序列化它们的公共实例字段,从而产生一个空对象。类似地,将数组传递给此方法不会产生包含每个元素的 JSON 数组,而是产生一个包含数组对象本身的公共字段的对象(其中没有字段)。要序列化数组或基本类型的实际内容,有必要将其包装在类或结构体中。

此方法可以从后台线程调用。在执行期间,您不应更改传递给此函数的对象。

其他资源:MonoBehaviourScriptableObjectObject.GetInstanceID

using UnityEngine;

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

public string SaveToString() { return JsonUtility.ToJson(this); }

// Given: // playerName = "Dr Charles" // lives = 3 // health = 0.8f // SaveToString returns: // {"playerName":"Dr Charles","lives":3,"health":0.8} }