【Unity + LitJson】字典键为int或Enum时报错,InvalidCastException: Specified cast is not valid
报错信息
InvalidCastException: Specified cast is not valid
百度了一下说是类型转换错误,需要强转。
我是新写了一个Dictionary<TerrainType,int>
,其中的TerrainType
是一个枚举类型,如下
[Serializable]
public enum TerrainType
{
Player = -1, Empty = 0, Wall = 1, Coin, Gem, Flower, Goal, Spike, Belt, TurnBelt, Lever, Door, Key, Portal, Rock,
}
然后就报错了
报错原因
LitJson
不支持字典的键为int
或者Enum
之类的,键只支持string
类型
简单的解决方案 (不修改 .dll 文件)
- 我们把字典修改成
Dictionary<string,int>
字典添加元素的代码改为
foreach (TerrainType ter in TerrainType.GetValues(typeof(TerrainType)))
{
save.Dict_int[ter.ToString()] = 0;
}
- 如果原先的键为
int
,你也可以单纯加上.ToString()
即可
查看保存结果,正常运行
- 同理,如果要获取字典中的值,使用如下代码
Debug.Log(TerrainType.Belt.ToString() + " " + save.Dict_int[TerrainType.Belt.ToString()]);