Исключение сериализации XML на Android после перехода с Unity 2019 на 2020

#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 решило мою проблему:

Настройка плеера -> Другие настройки ->> Конфигурация:

введите описание изображения здесь

Но с этими настройками у меня не может быть сборки для разработки. Таким образом, это решение является временным решением.