You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 00:15:59