Version: 5.5

JsonUtility.FromJsonOverwrite

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

Parameters

json The JSON representation of the object.
objectToOverwrite The object that should be overwritten.

Description

Overwrite data in an object by reading from its JSON representation.

This method is very similar to JsonUtility.FromJson, except that instead of creating a new object and loading the JSON data into it, it loads the JSON data into an existing object. This allows you to update the values stored in classes or objects without any allocations.

Internally, this method uses the Unity serializer; therefore the object you pass in must be supported by the serializer: it must be a MonoBehaviour, ScriptableObject, or plain class/struct with the Serializable attribute applied. The types of fields that you want to be overwritten must be supported by the serializer; unsupported fields will be ignored, as will private fields, static fields, and fields with the NonSerialized attribute applied.

Any plain class or structure is supported, along with classes derived from MonoBehaviour or ScriptableObject. Other engine types are not supported. In the Editor only, you can use EditorJsonUtility.FromJsonOverwrite to overwrite other engine objects.

If a field of the object is not present in the JSON representation, that field will be left unchanged.

The version of this method that takes a string can be called from background threads. You should not alter the object that is being overwritten while the function is running. The version of this method that takes a TextAsset cannot be called from a background thread.

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 }