c# - 如何对两个不同的程序集进行序列化和反序列化?
问题描述
这是一个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
”。有很多充分的理由认为它在 .NET Core / .NET 5+ 中已弃用,并且匹配类似类型的这种小不便:甚至没有列出该列表!(顺便说一句,您可以通过将 DTO 类型移动到其他项目都引用的库程序集来避免这样做)。
注意:对于几乎任何其他序列化程序- JSON、xml、protobuf 等 - 它已经“正常工作”:不同程序集中的类型无关紧要。坦率地说,这里最好的建议很简单:“更改序列化程序”。
推荐阅读
- javascript - 在 wordpress Gutenberg 块中调用 DateTimePicker
- c# - Ocelot 不会重新定义为微服务
- javascript - 由于 UX 原因,如何使按钮看起来已启用,但它应该被禁用
- c++ - 从 boost 创建的缓冲区访问数据
- c# - 如何使用相同的实例?
- svg - 视频 SVG 仅在 Safari 中不渲染
- sql - 使用不包含字符串“05613”的正则表达式。表中有 NAW_05613_11_PL04_02。需要不显示具有 05613 的条件行
- image - 在 pyspark 中编写图像数据帧
- python - 如何在 django 中以多行显示输出?'\n' 不起作用
- asp.net-mvc - 从 AZURE SEARCH 索引查询时,我们是否必须在任何地方定义 url