You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构建DLL时特性是否会丢失?Unity中使用ASP.NET Core共享库DLL序列化失败问题

构建DLL时特性是否会丢失?Unity中使用ASP.NET Core共享库DLL序列化失败问题

首先明确说:[Serializable]特性不会在DLL构建过程中丢失,你遇到的问题根源不在特性丢失,而是.NET版本兼容和Unity运行时环境的限制导致的。

咱们一步步拆解问题:

为什么会出现这个TypeLoadException?

你用ASP.NET Core(.NET 6)编译共享库,而Unity的运行时通常基于Mono或者.NET Framework的子集,和.NET Core的类库环境有差异。错误里提到的System.Diagnostics.DebuggerBrowsableAttribute,是.NET Core编译器自动给自动属性(比如你代码里的public Guid Id { get; set; })添加的调试特性,但Unity的运行时环境里没有这个属性的定义,所以序列化时就会抛出找不到类型的异常。

解决办法

给你几个实用的方案,按优先级排序:

  1. 调整共享库的目标框架为.NET Standard 2.0
    这是最根本的解决方式,.NET Standard 2.0是Unity和ASP.NET Core都完美支持的通用框架标准,能最大程度避免跨平台的类型依赖问题。你只需要在共享库的项目文件里把TargetFramework改成netstandard2.0,重新编译DLL即可。

  2. 替换自动属性为字段(或手动实现属性)
    Unity的序列化系统(尤其是自带的JsonUtility)对字段的支持远好于自动属性,而且能避免编译器自动添加那些Unity不兼容的调试特性。比如把你的User类改成:

    namespace SharedLibrary
    {
        [System.Serializable]
        public class User
        {
            public Guid Id;
            public string Username;
            public string Email;
            public string FirstName;
            public string LastName;
            public Role Role;
        }
    }
    

    如果一定要保留属性的封装性,就手动实现get/set,不要用自动属性的语法:

    namespace SharedLibrary
    {
        [System.Serializable]
        public class User
        {
            private Guid _id;
            public Guid Id { get => _id; set => _id = value; }
            
            // 其他属性同理手动实现
            private string _username;
            public string Username { get => _username; set => _username = value; }
        }
    }
    
  3. 使用Unity适配的序列化工具
    尽量避免在Unity里用.NET Core的System.Text.Json,换成Unity自带的JsonUtility,或者更强大的第三方库比如Newtonsoft.Json的Unity专用版本(注意不是普通的NuGet包,是适配Unity的版本)。这些工具更了解Unity的运行时环境,能避开很多类型兼容坑。

  4. 检查Unity的项目设置
    打开Unity的Edit > Project Settings > Player,在Other Settings里找到Configuration下的Api Compatibility Level,设置为.NET Framework 4.x(如果你的共享库是基于.NET Standard 2.0的话,这个设置是兼容的),确保和你的DLL目标框架匹配。

总结

你的[Serializable]特性一直都在,问题出在跨平台的.NET环境差异上,调整共享库的目标框架、修改类的成员定义,再配合Unity适配的序列化工具,就能解决这个问题。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 11:34:38