首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用IL2CPP序列化lib类有什么问题?

用IL2CPP序列化lib类有什么问题?
EN

Stack Overflow用户
提问于 2019-05-28 21:48:39
回答 1查看 442关注 0票数 0

在Unity Project上将脚本后端从Mono设置为IL2CPP后,当它运行lib类的XML反序列化(从dll库)时,它会在运行时抛出异常。

Google Play将很快不再接受不包含64位版本的构建。这意味着在Unity中我们必须从单声道切换到IL2CPP。目标设备是Android设备。

我们尝试使用不同版本的.Net框架来构建dll库。我们还尝试在默认构造函数(无参数)中添加一些指令。然后,我们在反序列化调用之前使用构造函数,以防在构建时进行剥离。我们试图通过代码强制禁用剥离级别,但我们不知道它是否有效。

下面是出现问题的类,其中反序列化失败。

代码语言:javascript
复制
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; }
        [...]
    }
}

这是我的序列化函数

代码语言:javascript
复制
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无法序列化,因为它没有默认的公共构造函数“当然,我们有一个无参数的构造函数。

编辑:我们在Unity 2018.4上

EN

回答 1

Stack Overflow用户

发布于 2019-05-29 03:19:50

这里的问题可能是IL2CPP在构建过程中删除了DeviceLicenceFile类,因为它只通过泛型/反射使用。(IL2CPP执行托管代码剥离,以减少二进制大小/构建时间。)

您可以将整个程序集(或仅该类型)添加到一个名为link.xml的文件中,该文件必须放在您的Assets目录的根目录下,这将告诉Unity不要删除该类。查看这里的文档以获取更多信息:https://docs.unity3d.com/Manual/IL2CPP-BytecodeStripping.html -您将在“如何在使用反射时处理剥离”一节中看到您需要的文件内容的示例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56343715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档