Skip to content

Instantly share code, notes, and snippets.

@RestoreMonarchy
Last active March 31, 2021 14:30
Show Gist options
  • Save RestoreMonarchy/a97e1dd123d5bec8c967be4ebf36a8d9 to your computer and use it in GitHub Desktop.
Save RestoreMonarchy/a97e1dd123d5bec8c967be4ebf36a8d9 to your computer and use it in GitHub Desktop.
Saving data to json file

DataStorage is a simple class I'm using in my plugins to save data in json file

public class DataStorage<T> where T : class
{
    public string DataPath { get; private set; }
    public DataStorage(string dir, string fileName)
    {
        DataPath = Path.Combine(dir, fileName);
    }

    public void Save(T obj)
    {
        string objData = JsonConvert.SerializeObject(obj, Formatting.Indented);

        using (StreamWriter stream = new StreamWriter(DataPath, false))
        {
            stream.Write(objData);
        }
    }

    public T Read()
    {
        if (File.Exists(DataPath))
        {
            string dataText;
            using (StreamReader stream = File.OpenText(DataPath))
            {
                dataText = stream.ReadToEnd();
            }
            return JsonConvert.DeserializeObject<T>(dataText);
        }
        else
        {
            return null;
        }
    }
}

Sample Usage

public class Player
{
    public string SteamID { get; set; }
    public string Name { get; set; }        
}

...

public class SamplePlugin : RocketPlugin 
{
    public DataStorage<List<Player>> PlayersDataStorage { get; private set; }
    private List<Player> playersData;
    
    protected override void Load()
    {
        // Directory is a property inside RocketPlugin (it's a path to plugin's directory)
        PlayersDataStorage = new DataStorage<List<Player>>(Directory, "PlayersData.json");
        // We're loading PlayersData on plugin load
        ReloadPlayersData();
    }
    
    public void ReloadPlayersData() 
    {
        playersData = PlayersDataStorage.Read();
        // If file didn't exist or was empty we have to initialize list to avoid null reference error
        if (playersData = null) 
            playersData = new List<Player>();
    }
    
    public Player GetPlayer(string steamID) 
    {
        return playersData.FirstOrDefault(x => x.SteamID == steamID);
    }
    
    public void AddPlayer(Player player) 
    {
        // Adding player to playersData list
        playersData.Add(player);
        // Saving playersData list to file
        PlayersDataStorage.Save(playersData);
    }
}
@negrifelipe
Copy link

Nice ! 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment