ExecutionEngineException:尝试JIT编译方法'System.Collections.Generic.Dictionary'

时间:2015-03-11 15:42:28

标签: c# ios unity3d jit aot

在我的unity3d游戏中,我有以下词典:

 public Dictionary<string, List<UpgradeData>> upgradeList;

其中UpgradeData是一个非常简单的类:

public class UpgradeData
{
   public bool lockStatus;
   public bool purchased;

}

我读了here你不能使用值类型作为字典键,但据我所知,sting不是值类型。因此,问题必须来自使用List作为字典值。任何想法如何解决这个问题。该代码适用于Windows平台和MacOS。我正在尝试使用二进制格式化程序序列化此字典。我在序列化其他类时遇到了类似的问题,但我设法通过添加:

来解决这个问题
 if (Application.platform == RuntimePlatform.IPhonePlayer)
        {
            System.Environment.SetEnvironmentVariable("MONO_REFLECTION_SERIALIZER", "yes");
        }

如何序列化字典需要做什么?

编辑:忘记包括与词典一起使用的整个班级

[Serializable]
    public class CharacterUpgradeList
    {

        private UpgradeData[] _upgrade_Data;
        private List<UpgradeData>[] upgData;

        public Dictionary<string, List<UpgradeData>> upgradeList;
        public CharacterUpgradeList()
        {
            upgData = new List<UpgradeData>[4];
            for (int i = 0; i < upgData.Length; i++)
            {
                upgData[i] = new List<UpgradeData> { 
                        new UpgradeData(),
                        new UpgradeData(),
                        new UpgradeData(),
                        new UpgradeData(),
                        new UpgradeData(),
                        new UpgradeData()
                   };
            }

            upgradeList = new Dictionary<string, List<UpgradeData>>
        {
            {"Man",upgData[0]},
            {"Woman",upgData[1]},
            {"Boy",upgData[2]},
            {"Girl",upgData[3]}

        };
        }
    }

然后我在上面的类中创建一个对象:

[Serializable]
class GameData
{
    public int _coinAmount, _upgradeLevel;
    public Level_Data[] _level_Data;
    public CharacterUpgradeList _charUpgradeList;
    public SerialVector2 serialVector;

    public GameData()
    {
        _charUpgradeList = new CharacterUpgradeList(); 
    }

}

我正在尝试序列化GameData。

1 个答案:

答案 0 :(得分:2)

BinaryFormatter依赖于JIT编译,iOS不支持。问题不在于您的数据结构,而是平台功能限制。

您必须使用支持完整AOT编译的其他序列化库。我很幸运JsonFx。有人推荐protobuf-net