【Unity + LitJson】字典键为int或Enum时报错,InvalidCastException: Specified cast is not valid

文章讲述了在Unity中使用LitJson解析数据时遇到InvalidCastException的问题,原因是LitJson不支持字典键为Int或Enum。提供了一个简单的解决方案,即把字典类型改为Dictionary<string,int>,并使用枚举的ToString()方法进行键的转换,以此避免修改LitJson的.dll文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【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()]);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值