> For the complete documentation index, see [llms.txt](https://obvious-game.gitbook.io/soap/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://obvious-game.gitbook.io/soap/scene-documentation/5_scriptablesaves/save-reader.md).

# Save Reader

5\_ScriptableSave

Let's select the Save Reader in the hierarchy and inspect its code. This code is responsible for displaying the content of the save in the UI.

<img src="https://1391552916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWqhD9b0UbiZjyC9B8azX%2Fuploads%2FnZmQjD18bsVh1scCGVqg%2F9.png?alt=media" alt="" width="310">

In Awake(), you can see that we register to all the callbacks provided by the Scriptable Save: OnSaved, OnLoaded, and OnDeleted. We want to update the text whenever the save performs an operation.

```csharp
private void Awake()
{
    _scriptableSaveExample.OnLoaded += RefreshText;
    _scriptableSaveExample.OnSaved += RefreshText;
    _scriptableSaveExample.OnDeleted += RefreshText;

    if (_scriptableSaveExample.LoadMode == ScriptableSaveBase.ELoadMode.Automatic) 
        RefreshText();
}
```

Note that if the load mode is set to automatic, Awake() will be called after the save has already been loaded. Therefore, we need to force RefreshText(). To display the save content, simply access the LastJsonString property:

```csharp
private void RefreshText()
{
    _nameText.text = _scriptableSaveExample.LastJsonString;
}
```
