Unity_Utils/SerializableDictionary.cs
2021-07-31 22:24:34 -04:00

39 lines
1.0 KiB
C#

using System;
using System.Collections.Generic;
using UnityEngine;
[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>();
public void OnBeforeSerialize()
{
_keys.Clear();
_values.Clear();
foreach (KeyValuePair<TKey,TValue> pair in this)
{
_keys.Add(pair.Key);
_values.Add(pair.Value);
}
}
public void OnAfterDeserialize()
{
Clear();
if (_keys.Count != _values.Count)
{
throw new Exception(
$"There are {_keys.Count} keys and {_values.Count} values after deserialization." +
" Make sure that both key and value types are serializable.");
}
for (int i = 0; i < _keys.Count; ++i)
{
Add(_keys[i], _values[i]);
}
}
}