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

问题描述

这是一个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,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 等 - 它已经“正常工作”:不同程序集中的类型无关紧要。坦率地说,这里最好的建议很简单:“更改序列化程序”。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...