Dictionary <string, object> LoadFile(string fileName)
        {
            if (UsePlayerPrefs)
            {
                if (PlayerPrefs.GetString(kPreferencePrefix + fileName, string.Empty) == string.Empty)
                {
                    SaveFile(fileName, new Dictionary <string, object>());
                }
            }
            else
            {
                if (!File.Exists(Application.persistentDataPath + savePath + fileName))
                {
                    SaveFile(fileName, new Dictionary <string, object>());
                }
            }

            var dict = new Dictionary <string, System.Object>();

            string contents = string.Empty;

            if (UsePlayerPrefs)
            {
                contents = PlayerPrefs.GetString(kPreferencePrefix + fileName, string.Empty);
            }
            else
            {
                contents = File.ReadAllText(Application.persistentDataPath + savePath + fileName);
            }

            SerializableOutput data = JsonUtility.FromJson <SerializableOutput>(contents);

            for (int i = 0; i < data.keys.Length; i++)
            {
                string val = data.values[i];
                object value;
                if (data.types[i] == ValueType.Bool)
                {
                    value = bool.Parse(val);
                }
                else if (data.types[i] == ValueType.Int)
                {
                    value = int.Parse(val);
                }
                else if (data.types[i] == ValueType.Float)
                {
                    value = float.Parse(val);
                }
                else
                {
                    value = val;
                }

                dict.Add(data.keys[i], value);
            }

            return(dict);
        }
        void SaveFile(string filename, Dictionary <string, System.Object> entries)
        {
            int count = entries.Count;

            SerializableOutput data = new SerializableOutput();

            data.keys   = new string[count];
            data.values = new string[count];
            data.types  = new ValueType[count];

            int i = 0;

            foreach (var kvp in entries)
            {
                data.keys[i] = kvp.Key;
                object value = kvp.Value;

                if (value is bool)
                {
                    data.types[i] = ValueType.Bool;
                }
                else if (value is int)
                {
                    data.types[i] = ValueType.Int;
                }
                else if (value is float)
                {
                    data.types[i] = ValueType.Float;
                }
                else
                {
                    data.types[i] = ValueType.String;
                }

                data.values[i] = kvp.Value.ToString();
                i++;
            }

            if (UsePlayerPrefs)
            {
                PlayerPrefs.SetString(kPreferencePrefix + filename, JsonUtility.ToJson(data));
            }
            else
            {
                File.WriteAllText(Application.persistentDataPath + savePath + filename, JsonUtility.ToJson(data));
            }
        }