Объявление
public static void FromJsonOverwrite(string json, object objectToOverwrite);Параметры
json | JSON-представление объекта. |
objectToOverwrite | Объект для перезаписи. |
Описание
Перезаписать данные в объекте, прочитав его представление JSON.
Это похоже на JsonUtility.FromJsonOverwrite, но поддерживает любой объект механизма. Доступны те же поля, которые доступны через API SerializedObject или в YAML-сериализованной форме объекта.
Обратите внимание, что использование этого метода со структурой может не дать ожидаемого результата, поскольку структуры передаются методу по значению, а не по ссылке. Это означает, что вместо того, чтобы метод перезаписывал вашу исходную структуру, упакованная копия структуры передается в метод и перезаписывается. Этого можно избежать, создав собственную упакованную копию структуры для передачи в метод, а затем снова скопировав значения после возврата метода. См. пример ниже.
Даже когда вы делаете это, встроенные структуры Unity (например, Vector3 или Bounds) не могут быть напрямую переданы в метода, поэтому вы должны заключить встроенные структуры Unity в класс-оболочку или структуру.
using UnityEngine;
using UnityEditor;
[System.Serializable]
struct MyStruct
{
public int value;
}
public class StructExample : MonoBehaviour
{
void Start()
{
MyStruct myStruct = new MyStruct();
object boxedStruct = myStruct;
var json = @"{ ""value"" : 42 }";
EditorJsonUtility.FromJsonOverwrite(json, boxedStruct);
myStruct = (MyStruct)boxedStruct;
Debug.Log("myStruct.value = " + myStruct.value);
}
}