首页 > 解决方案 > 如何对两个不同的程序集进行序列化和反序列化?

问题描述

这是一个C# 项目。我使用BinaryFormatter作为我的应用程序的序列化器和反序列化器。
因为有两个应用程序并且程序集名称彼此不同,所以我使用序列化绑定器来解决查找类型的问题。
但我仍然收到一个错误,即:

Unable to find assembly 'GameServer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.

这是我的序列化活页夹代码:

    public override Type BindToType(string assemblyName, string typeName)
    {
        if (assemblyName.Contains("GameServer"))
        {
            assemblyName = "Assembly-CSharp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=12345";
        }
        return Type.GetType(typeName);
    }

在上面的代码中,我只是检查是否找到名为“GameServer”的程序集,然后将其重命名为本地程序集名称。
我在这里错过了什么吗?

标签: c#serializationbinaryformatter

解决方案


老实说,这里唯一的“好”答案是“不要使用BinaryFormatter”,紧随其后的是“真的,不要使用BinaryFormatter”。有很多充分的理由认为它在 .NET Core / .NET 5+ 中已弃用,并且匹配类似类型的这种小不便:甚至没有列出该列表!(顺便说一句,您可以通过将 DTO 类型移动到其他项目都引用的库程序集来避免这样做)。

注意:对于几乎任何其他序列化程序- JSON、xml、protobuf 等 - 它已经“正常工作”:不同程序集中的类型无关紧要。坦率地说,这里最好的建议很简单:“更改序列化程序”。


推荐阅读