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

Unity中如何序列化与反序列化Dictionary<string,List<string>>?

解决Unity中JsonUtility无法序列化字典的问题

方案1:用可序列化键值对列表适配现有JsonUtility流程

JsonUtility原生不支持Dictionary类型,但对List和自定义可序列化类支持良好。你可以在ConfigSave类中新增一个仅用于序列化的中间列表,通过转换逻辑衔接原有字典字段,不用拆分文件或新增独立类:

  1. 定义可序列化的键值对辅助类:
[Serializable]
public class OutfitEntry
{
    public string characterName;
    public List<string> outfits;
}
  1. 修改ConfigSave类,添加转换逻辑:
[Serializable]
public class ConfigSave
{
    // 原字典字段,标记为[NonSerialized]避免被JsonUtility直接处理
    [NonSerialized]
    public Dictionary<string, List<string>> outfits = new Dictionary<string, List<string>>();

    // 用于JsonUtility序列化的中间列表
    public List<OutfitEntry> outfitEntries = new List<OutfitEntry>();

    // 序列化前调用:将字典转成列表
    public void PrepareForSave()
    {
        outfitEntries.Clear();
        foreach (var kvp in outfits)
        {
            outfitEntries.Add(new OutfitEntry
            {
                characterName = kvp.Key,
                outfits = kvp.Value
            });
        }
    }

    // 反序列化后调用:将列表转回字典
    public void AfterLoad()
    {
        outfits.Clear();
        foreach (var entry in outfitEntries)
        {
            outfits[entry.characterName] = entry.outfits;
        }
    }
}
  1. 适配现有流程:
  • 保存时:先调用PrepareForSave(),再用JsonUtility.ToJson()序列化整个ConfigSave对象
  • 加载时:先反序列化得到ConfigSave实例,再调用AfterLoad()恢复字典数据

方案2:替换为Newtonsoft.Json(Unity官方支持)

如果不想写转换逻辑,可以直接用Unity官方集成的Newtonsoft.Json包,它原生支持字典序列化,且完全兼容你现有所有字段类型:

  1. 打开Unity Package Manager,导入com.unity.nuget.newtonsoft-json包
  2. 替换原有序列化/反序列化代码:
  • 保存逻辑:
string json = Newtonsoft.Json.JsonConvert.SerializeObject(configSaveInstance, Newtonsoft.Json.Formatting.Indented);
File.WriteAllText(savePath, json);
  • 加载逻辑:
string json = File.ReadAllText(savePath);
ConfigSave configSaveInstance = Newtonsoft.Json.JsonConvert.DeserializeObject<ConfigSave>(json);

这种方式无需修改ConfigSave类结构,直接替换原有的JsonUtility调用即可,后续遇到复杂类型序列化也更省心。

内容的提问来源于stack exchange,提问作者Klausbdl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 01:10:11