调用MemoryPackSerializer.Serialize()时抛出类型未注册异常求助
解决MemoryPack序列化时“类未注册”的异常
你遇到的MemoryPackSerializationException是因为MemoryPack依赖源生成器自动生成序列化/反序列化代码,但生成的代码未被正确生成或加载,以下是具体解决步骤:
1. 安装必需的NuGet包
MemoryPack需要两个核心包:
MemoryPack:核心序列化库MemoryPack.Generators:源生成器,负责为标记[MemoryPackable]的类生成partial实现
执行以下命令安装:
dotnet add package MemoryPack dotnet add package MemoryPack.Generators
确保两个包的版本保持一致。
2. 确认源生成器未被禁用
检查项目文件(.csproj)中是否存在禁用源生成器的配置,如果有,删除该配置:
<!-- 确保项目文件中没有这段配置 --> <PropertyGroup> <DisableImplicitSourceGenerators>true</DisableImplicitSourceGenerators> </PropertyGroup>
.NET 6默认启用源生成器,无需额外配置。
3. 清理并重建项目
源生成器的输出可能因缓存异常导致未正确生成,执行以下命令清理并重建:
dotnet clean dotnet build
重建后,可以查看项目的obj/Debug/net6.0目录下是否生成了类似Person.g.cs的文件,该文件包含Person类的序列化实现代码,说明源生成器工作正常。
4. 验证代码正确性
你的Person类代码本身是正确的:
- 标记了
[MemoryPackable]特性 - 类声明为
partial - 正确引用了
MemoryPack命名空间
确认没有拼写错误即可。
内容的提问来源于stack exchange,提问作者yawork
相关产品推荐
相关产品推荐

