实现Dictionary(字典)的序列化
由于Unity不支持序列化Dictionary,使用Json存储数据时存在不便,故实现一个SerializableDictionary类用于存储Dictionary
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[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>();
//在Unity序列化前,把字典中的数据存储到存储key和value
public void OnBeforeSerialize()
{
keys.Clear();
values.Clear();
foreach (KeyValuePair<Tkey, TValue> pair in this)
{
keys.Add(pair.Key);
values.Add(pair.Value);
}
}
//在Unity反序列化后,将存储的数据再写入字典
public void OnAfterDeserialize()
{
this.Clear();
if(keys.Count!=values.Count)
{
Debug.Log("key和value的数量不相等!");
}
for(int i=0;i<keys.Count; i++)
{
this.Add(keys[i], values[i]);
}
}
}