После установки скриптового бэкэнда из Mono в IL2CPP в проекте Unity он выдает исключение во время выполнения, когда запускает десериализацию XML для класса lib (из библиотеки dll).
Скоро Google Playбольше не принимать сборку, которая не включает 64-битную версию.Это значит, что в Unity мы должны перейти с Mono на IL2CPP.Целевое устройство - это устройство Android.
Мы пытались собрать библиотеку dll с различными версиями .Net Framework.Мы также попытались добавить некоторые инструкции в конструктор по умолчанию (без параметров).Затем мы использовали конструктор перед вызовом десериализации, в случае разборки во время сборки.Мы пытались принудительно отключить уровень очистки с помощью кода, но мы не знаем, работает ли он.
Вот класс, в котором возникает проблема, в которой происходит сбой десериализации.
namespace Api.Common.Licence
{
[XmlRoot(ElementName = "DeviceLicenceFile")]
public class DeviceLicenceFile
{
public DeviceLicenceFile()
{
//Email = null; //tried that for an example but is usually empty
}
[XmlElement(ElementName = "Email")]
public string Email { get; set; }
[...]
}
}
Это моя функция сериализации
public static T Deserialize<T>(string text)
{
var serializer = new XmlSerializer(typeof(T));
T obj = (T) (serializer.Deserialize(new StringReader(text)));
return obj;
}
Все работает с Mono, но с IL2CPP, он выдает следующую ошибку => "System.InvalidOperationException: произошла ошибка, отражающая тип 'Api.Common.Licence.DeviceLicenceFile'.---> System.InvalidOperationException: Api.Common.Licence.DeviceLicenceFile не может быть сериализован, потому что у него нет общедоступного конструктора по умолчанию. «Конечно, у нас есть конструктор без параметров.
РЕДАКТИРОВАТЬ: Мы в Unity2018,4