using System.Collections; using System.Collections.Generic; using UnityEngine; namespace TON { [System.Serializable] public class SerializableDictionary : Dictionary, ISerializationCallbackReceiver { [System.Serializable] struct WrapValueClass { public TValue Value; } [SerializeField] private List keys = new List(); [SerializeField] private List values = new List(); // save the dictionary to lists public void OnBeforeSerialize() { keys.Clear(); values.Clear(); foreach (KeyValuePair pair in this) { keys.Add(pair.Key); values.Add(new WrapValueClass() { Value = pair.Value }); } } // load dictionary from lists public void OnAfterDeserialize() { this.Clear(); if (keys.Count > 0 && values.Count > 0) { if (keys.Count != values.Count) throw new System.Exception(string.Format("there are {0} keys and {1} values after deserialization. Make sure that both key and value types are serializable.")); for (int i = 0; i < keys.Count; i++) this.Add(keys[i], values[i].Value); } } } }