Unity C#:程序化生成战利品系统中继承类的序列化与反序列化问题
JSON序列化继承类丢失子类属性的解决思路
我在游戏开发中定义了包含通用物品信息的Item基类,通过继承实现了Armor装备类,代码如下:
[System.Serializable] public class Item { public string itemName; public string itemID; public string itemDescription; } [System.Serializable] public class Armor : Item { public int defense; public int armorValue; }
游戏中击杀敌人会生成带随机属性的Armor实例,库存系统的物品槽以Item类型存储这些物品。但将物品槽用JSON保存后再加载时,继承关系失效,只能得到Item基类实例,Armor的defense和armorValue等特有属性全部丢失。
我尝试了以下几种方案,但都没有效果:
- 对每个物品槽单独调用
JsonConvert.Serialize和JsonConvert.Deserialize - 将加载后的
Item实例强制转换为Armor - 在
Armor的构造函数上添加[JsonConstructor]特性
作为JSON序列化的新手,我摸索后找到了解决方法:使用Dictionary<string, Armor>存储所有拾取到的Armor实例,以Item.ID作为字典的键。这样装备时直接从字典中获取Armor实例,不需要进行类型转换,也避免了序列化时因基类存储导致的子类属性丢失问题。
内容的提问来源于stack exchange,提问作者Nikos Avgoustidis
相关产品推荐
相关产品推荐

