В моей Unity3D игре у меня есть следующий словарь:ExecutionEngineException: Попытка метода JIT компиляции 'System.Collections.Generic.Dictionary'
public Dictionary<string, List<UpgradeData>> upgradeList;
где UpgradeData очень простой класс:
public class UpgradeData
{
public bool lockStatus;
public bool purchased;
}
Я читал here о том, что вы не можете использовать типы значений в качестве словарных ключей, но насколько я знаю, укуса не является типом значений. Поэтому проблема должна исходить из использования List в качестве значения словаря. Любая идея, как обойти это. Код работает как на платформе Windows, так и на MacOS. Я пытаюсь сериализовать этот Словарь с помощью бинарного форматирования. Я имел аналогичные проблемы с сериализации других классов, но мне удалось исправить, добавив:
if (Application.platform == RuntimePlatform.IPhonePlayer)
{
System.Environment.SetEnvironmentVariable("MONO_REFLECTION_SERIALIZER", "yes");
}
Что мне нужно сделать, чтобы сериализовать словарь?
Edit: Забыл включаемые весь класс, который работает со словарем
[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.
Просто взглянув на это быстро, я подумал, что вы должны иметь возможность «сериализовать объект», который, как говорится, менял бы сигнатуру метода, чтобы сделать второй параметр объекта в основном путем литья 'upgradeList' примерно таким образом ' (IDictionary <строка, объект>) upgradeList' Я не уверен, как Mono справится с этим, но я знаю, что C# должен работать – MethodMan
@MethodMan. Я сделал edin на своем исходном сообщении, возможно, вы можете взглянуть сейчас. –
. В этом случае выглядит так: «Сериализовать» класс, в этом случае вы рассмотрели любые примеры здесь, на «Stackoverflow», здесь есть сайт, а также поиск в Google, вы можете дать рабочие примеры [Stackoverflow Serialize a class] (http://stackoverflow.com/questions/5937630/serialize-class-to-xml) – MethodMan