如何序列化和反序列化两个不同的程序集?

how to serialize and deserialize over two different assembly?

这是一个 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”的程序集,然后将其重命名为本地程序集名称。
我在这里遗漏了什么吗?

老实说,这里唯一的“好”答案是“不要使用 BinaryFormatter”,紧随其后的是“真的,不要使用 BinaryFormatter”。有 many good reasons that it is considered deprecated in .NET Core / .NET 5+,匹配相似类型的这个小不便:甚至没有进入该列表! (顺便说一句,您可以通过将 DTO 类型移动到其他两个项目都引用的库程序集来避免这样做)。

注意:对于 几乎任何其他序列化器 - JSON、xml、protobuf 等 - 它已经“正常工作”:类型是在不同的组件中不会有什么关系。所以坦率地说,这里最好的建议就是:“更改序列化程序”。