Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save belzecue/297dab605815fc039e21abb05c7593ea to your computer and use it in GitHub Desktop.
Save belzecue/297dab605815fc039e21abb05c7593ea to your computer and use it in GitHub Desktop.
using UnityEngine;
using System.Collections.Generic;
[System.Serializable]
public class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>, ISerializationCallbackReceiver {
[SerializeField]
private List<TKey> keys = new List<TKey> ();
[SerializeField]
private List<TValue> values = new List<TValue> ();
// save the dictionary to lists
public void OnBeforeSerialize () {
keys.Clear ();
values.Clear ();
foreach (KeyValuePair<TKey, TValue> pair in this) {
keys.Add (pair.Key);
values.Add (pair.Value);
}
}
// load dictionary from lists
public void OnAfterDeserialize () {
this.Clear ();
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]);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment