C# ExecutionEngineeException:尝试JIT编译方法';System.Collections.Generic.Dictionary';

C# ExecutionEngineeException:尝试JIT编译方法';System.Collections.Generic.Dictionary';,c#,ios,unity3d,jit,aot,C#,Ios,Unity3d,Jit,Aot,在我的unity3d游戏中,我有以下词典: public Dictionary<string, List<UpgradeData>> upgradeList; 我听说你不能使用值类型作为字典键,但据我所知,sting不是一种值类型。因此,问题一定来自使用列表作为字典值。你知道怎么解决这个问题吗。该代码在windows平台和MacOS上都有效。我正在尝试使用二进制格式化程序序列化此词典。我在序列化其他类时遇到了类似的问题,但我通过添加以下内容成功地解决了这一问题: i

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

 public Dictionary<string, List<UpgradeData>> upgradeList;
我听说你不能使用值类型作为字典键,但据我所知,sting不是一种值类型。因此,问题一定来自使用列表作为字典值。你知道怎么解决这个问题吗。该代码在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]}

        };
        }
    }

我正在尝试序列化游戏数据。

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


您必须使用另一个支持完整AOT编译的序列化库。我很幸运。有人推荐。

快速查看它,我认为您应该能够
序列化一个对象
,也就是说,我将更改方法签名,使第二个参数成为一个对象,基本上是通过铸造
升级列表
类似的
(IDictionary)upgradeList
我不确定Mono会如何处理这个问题,但我知道C#应该work@MethodMan我在我的原始帖子中做了一个EDN,也许你现在可以看一下。在这一点上,你想做的是
序列化
这个类。在这种情况下,你有没有看过
Stackoverflow
上的任何示例这里是一个站点除了谷歌搜索之外,你还可以提供一些工作示例,说明你应该用你得到的错误来编辑你的文章。此外,还应包括该例外情况提供的任何附加信息。您可能还应该尝试序列化一个
列表
列表,看看是否会出现相同的异常,因为您怀疑列表是问题所在。通过设置
System.Environment.SetEnvironmentVariable(“MONO_REFLECTION_SERIALIZER”,“yes”)我能够将BinaryFormatter用于其他所有内容。我需要找出一种从Ipad上发布错误消息的方法。你可以尝试序列化简单的类型,然后将它们重新缝合在一起,但基本上你使用的是一个在目标平台上明确不受支持的库。我会解决的。@ruttwr是的,我迁移到使用protobuf-net,现在一切都更好了。还不明白为什么它只会在列表和字典上出现
[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(); 
    }

}