JsonUtility.FromJsonOverwrite
Declaration
public static void FromJsonOverwrite(string json, object objectToOverwrite);Параметры
| Параметр | Описание |
|---|---|
| json-файл | JSON представление объекта. |
| objectToOverwrite | Объект, который должен быть перезаписан. |
Описание
Перезапись данных в объекте путем чтения из его представления JSON.
Этот метод очень похож на JsonUtility.FromJson, за исключением того, что вместо создания нового объекта и загрузки в него данных JSON, он загружает данные JSON в существующий объект. Это позволяет обновлять значения, хранящиеся в классах или объектах, без каких-либо распределений.
Внутренне этот метод использует серийизатор Unity. Создаваемый объект и все его поля должны соответствовать требованиям для серийизации серийизатором Unity. Полный список этих требований см. в Правила сериализации в руководстве.FromJsonOverwrite поддерживает любой обычный класс, а также классы, производные от MonoBehaviour или ScriptableObject. Другие типы движка не поддерживаются. Только в редакторе можно использовать EditorJsonUtility.FromJsonOverwrite перезаписать другие объекты двигателя.
Примечание: С FromJsonOverwrite принимает ссылочный тип, поэтому передача структуры (типа-значения) требует аккуратного
боксирование и распаковка и не рекомендуется. Вместо этого используйте JsonUtility.FromJson для структур следующим образом: JsonUtility.FromJson<MyStruct>(json);
Если поле объекта не присутствует в представлении JSON, то это поле будет оставлено без изменений.FromJsonOverwrite может быть вызвана из фоновых потоков. Вы не должны изменять объект, который перезаписывается, пока функция выполняется.
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 }