#android #unity3d #c#-4.0 #mono
Вопрос:
Я, наконец, перенес свой проект с Unity 2019.4.28f1 на 2020.3. 14f1. После очистки нескольких устаревших версий все, казалось, вернулось в нормальное состояние, однако при развертывании на Android я вижу проблему с десериализацией XML. Я получаю это исключение при попытке десериализации данных из строки:
NotSupportedException: Parent does not have a default constructor. The default constructor must be explicitly defined.
at System.Reflection.Emit.TypeBuilder.DefineDefaultConstructor (System.Reflection.MethodAttributes attributes) [0x00070] in <1dc10152da894b47b8bbfed156e7b841>:0
at System.Xml.Serialization.XmlSerializationILGen.GenerateBaseSerializer (System.String baseSerializer, System.String readerClass, System.String writerClass, System.Xml.Serialization.CodeIdentifiers classes) [0x00103] in <d0db3f607625460db8f5df59fe982070>:0
at System.Xml.Serialization.TempAssembly.GenerateRefEmitAssembly (System.Xml.Serialization.XmlMapping[] xmlMappings, System.Type[] types, System.String defaultNamespace, System.Security.Policy.Evidence evidence) [0x002ed] in <d0db3f607625460db8f5df59fe982070>:0
at System.Xml.Serialization.TempAssembly..ctor (System.Xml.Serialization.XmlMapping[] xmlMappings, System.Type[] types, System.String defaultNamespace, System.String location, System.Security.Policy.Evidence evid
Это вспомогательный метод, который я использую:
public static T DeserializeXml<T>(this string xml)
{
T obj = default(T);
XmlSerializer serializer = new XmlSerializer(typeof(T));
using (TextReader textReader = new StringReader(xml))
{
obj = (T)serializer.Deserialize(textReader);
}
return obj;
}
Все это работало годами без проблем. Эти исключения не возникают при запуске в редакторе или после развертывания на iOS или в автономном режиме/на рабочем столе. Так что, похоже, это связано с компиляцией только для Android.
Я поискал вокруг, но не нашел никакой конкретной подсказки, в чем причина и как это исправить. Так что любой намек приветствуется!
Ответ №1:
У меня аналогичная проблема, когда я использую бэкэнд сценариев=Mono в настройках плеера.
Использование опции IL2CPP решило мою проблему:
Настройка плеера -> Другие настройки ->> Конфигурация:
Но с этими настройками у меня не может быть сборки для разработки. Таким образом, это решение является временным решением.